是否可以在没有kwarg的django中定义success_url

问题描述 投票:0回答:1

我正在django文档中详细介绍该教程,以构建投票应用程序。我试图实现的目标是能够删除候选人,并在成功后返回到选举的详细视图。我知道我可以在URL中添加另一个参数,例如(下面的完整模板)

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

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

我还尝试根据要删除的候选者是ForeignKey-d来选择成功的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)

[detail_detail模板

{% 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的任何帮助。

django post class-based-views
1个回答
0
投票

因此,显然,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,但在return函数中必须指定它为kwargs。

我几乎可以肯定,“ election = ..”可以短一些,但是稍后再讲

© www.soinside.com 2019 - 2024. All rights reserved.