【问题标题】:Django multiple success urlsDjango 多个成功网址
【发布时间】:2015-09-17 08:44:03
【问题描述】:

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

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

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

  • save&continue = 留在此升级视图中

  • save&createNew = 转到 CreateView

它应该会像在 Django admin 中一样工作

我有这个更新视图:

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>

【问题讨论】:

    标签: python django django-views django-1.8


    【解决方案1】:

    在您的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 方法中的值。

    【讨论】:

    • 谢谢,当我意识到我仍然在 self.request.POST.get 中有我的 kwargs 时,这容易多了。我首先认为我必须重新设置它们,这就是为什么我在 post 方法中有 if 子句。
    猜你喜欢
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 2017-01-26
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多