パラメータに基づいて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
を編集してから、「カテゴリ」に戻ります。ここでは、エントリを複数のカテゴリの一部にすることができます。
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()
では渡しません。
同じ問題がありました。 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})
モデルで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'),
_
すべきです。
フォーム(テンプレート)に「次の」パラメーターを追加して、ビューでキャッチしてみませんか。この方法でリダイレクトを実現するのが一般的な方法です。