web-dev-qa-db-ja.com

渡された値に基づいて、UpdateViewのsuccess_url

パラメータに基づいてsuccess_urlを設定するにはどうすればよいですか?
私は本当に静的な場所ではなく、元の場所に戻りたいと思っています。擬似コードで:

url(r'^entry/(?P<pk>\d+)/edit/(?P<category>\d+)',
    UpdateView.as_view(model=Entry, 
                       template_name='generic_form_popup.html',
                       success_url='/category/%(category)')),

つまり、エントリpkを編集してから、「カテゴリ」に戻ります。ここでは、エントリを複数のカテゴリの一部にすることができます。

30
Bryce

MyUpdateViewから継承したクラスUpdateViewを作成し、_get_success_url_メソッドをオーバーライドします。

_class MyUpdateView(UpdateView):
    def get_success_url(self):
        pass #return the appropriate success url
_

また、継承クラスビュー内でtemplate_nameやmodelなどのパラメーターを渡しますが、urls.pyの.as_view()では渡しません。

53
Dima Bildin

同じ問題がありました。 Dimaが述べたように、self.kwargsからパラメーターを取得できました。

def get_success_url(self):
        if 'slug' in self.kwargs:
            slug = self.kwargs['slug']
        else:
            slug = 'demo'
        return reverse('app_upload', kwargs={'pk': self._id, 'slug': slug})
24
Aleck Landgraf

モデルでget_absolute_url(self)を定義します。例

_class Poll(models.Model):
    question = models.CharField(max_length=100)
    slug = models.SlugField(max_length=50)
    # etc ...

    def get_absolute_url(self):
        return reverse('poll', args=[self.slug])
_

PollUpdateView(UpdateView)がそのモデルのインスタンスをobjectとしてロードすると、デフォルトでget_absolute_url()メソッドを探して、POST。それから

_url(r'^polls/(?P<slug>\w+)/, UpdateView.as_view(
    model=Poll, template_name='generic_form_popup.html'),
_

すべきです。

4
C14L

フォーム(テンプレート)に「次の」パラメーターを追加して、ビューでキャッチしてみませんか。この方法でリダイレクトを実現するのが一般的な方法です。

0