3

如何使用 kwargs 或其他方式设置多个成功 url?

我想要,取决于哪个按钮单击了不同的成功 URL。

  • 保存 = 转到详细信息视图

  • save&continue = 留在这个 UpgradeView

  • save&createNew = 转到 CreateView

它应该在以后工作,就像在 Django 管理员中一样

我有这个更新视图:

class TopicEditView(UpdateView):
    fields = ['title','description',]
    model = Topic

    def post(self, request, *args, **kwargs):
        data = request.POST.copy()
        if data.get('save', False):
            pass
        elif data.get('save_and_continue', False):
            pass
        ...
        return UpdateView.post(self, request, *args, **kwargs)

    def get_success_url(self):
        return reverse('topic_detail', kwargs={'pk':self.object.pk})

这个简单的模板:

<form action="" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Speichern" name="save"/>
    <input type="submit" value="Speichern & weiter" 
        name="save_and_continue"/>
</form>
4

1 回答 1

6

在您的get_success_url方法中,检查提交按钮的值self.request.POST,并返回适当的 url:

def get_success_url(self):
    if self.request.POST.get('save'):
        return reverse('success_url_for_save')
    elif self.request.POST.get('save_and_continue'):
        return reverse('success_url_for_save_and_continue', kwargs={'pk':self.object.pk})
    else:
        return reverse('fallback_success_url')

post不需要检查方法中的值。

于 2015-06-30T13:55:54.070 回答