首页 > 解决方案 > 是否可以在没有 kwargs 的情况下在 django 中定义 success_url

问题描述

我正在详细说明 django 文档中的教程以构建投票应用程序。我试图实现的是能够删除候选人,并在成功时返回选举的详细信息。我知道我可以向 url 添加另一个参数,例如(下面的完整模板)

<a href="{% url 'candidate_delete' c.id object.id %}" class="btn btn-danger fa fa-trash" class></a>

我想知道是否可以使用 post 方法(虽然没有表格)。我做了一些研究,找到了“下一个”参数,但没有通过。看起来它需要一个表单,因为所有示例都在表单中使用“下一个”。

我还尝试根据要删除的候选人是 ForeignKey-d 的选举设置success_url,但这会产生错误:

在 /elections/candidate/delete/13/ 中配置不当 包含的 URLconf '1' 似乎没有任何模式。如果您在文件中看到有效模式,则问题可能是由循环导入引起的。

这是视图:

class CandidateDelete(LoginRequiredMixin, DeleteView):
    model = Candidate
    template_name = 'election/delete.html'

    def get_object(self):
        obj = super().get_object()
        print(self.request.POST)
        election = Election.objects.get(id=obj.poll_id)
        if not election.owner_id == self.request.user.id:
            raise Http404
        return obj

    def get_success_url(self, **kwargs):
        obj = super().get_object()
        election = Election.objects.get(id=obj.poll_id)
        return reverse_lazy('election_detail', election.id)

选举细节模板

{% extends 'base.html' %}

{% block content %}
{{object.name}} - 
<ul>
   {% for c in candidate_list %}
  <h2>{{ c.name }}</h2>
    <li> {{ c.intro }} {{c.id}} 
        {{c.email}} 
        <a href="{% url 'candidate_delete' c.id %}" class="btn btn-danger fa fa-trash" class></a> <input type="hidden" name="next" value={{object.id}} />
    </li>
    {% endfor %}
    <a href="{{ request.META.HTTP_REFERER }}" class="btn btn-primary" class>Back</a> 
</ul>
{% endblock %}

模板中的对象是候选人链接到的选举。

如您所见,我尝试了 post 方法,但是,环顾四周,它似乎只能以一种形式工作。success_url 配置也会引发错误。

非常感谢使用 post 方法或使用模型数据配置 get_success_url 的任何帮助。

标签: djangopostdjango-class-based-views

解决方案


因此,显然, reverse_lazy 必须看起来像这样:

    def get_success_url(self, **kwargs):
        obj = super().get_object()
        election = Election.objects.get(id=obj.poll_id)
        return reverse_lazy('election_detail', kwargs={'pk':election.id})

在模板中,您可以只添加 var,在返回函数中您必须指定它是一个 kwargs。

我几乎可以肯定“选举= ..”可以更短,但那是为了以后


推荐阅读