我正在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的任何帮助。
因此,显然,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 = ..”可以短一些,但是稍后再讲