Django Forms:如何在不更改URL的情况下避免隐藏输入



我遇到了一个无法完全解决的问题。

我有一个模型Question其中包含一个声明、有关提出它的用户的信息以及有关赞成票和反对票数量的信息。

在模板中,我的情况类似于以下内容:

{% for question in list_passed_with_questions %}
<p>{% question.statement %}</p>
<form method="post">
{% csrf_token %}
{{ vote_form.as_p }} #vote_form makes the user choose between 'yes'/'no'
<button type="primary">Think</button>
</form>
{% endfor %}

我的目标是能够知道每个用户投票给哪个question。假设我的template中有一个list of questions,每个都有一个允许用户投票的form- 那么我怎么知道用户在views.py中使用他们的输入时投票给哪一个?无论vote_formForm实例还是ModelForm实例,request.POST都将仅包含有关用户的"是/否"选择的信息(即,它不会包含例如问题pk)。

解决这个问题的一种方法是让submit button引出一个新的url,并将回答的问题pk作为slug传递。

我想要的另一种方法是指定一个传递question-object's pk.hidden-input字段

现在- 除了更改url并允许hidden input之外,我可以使用另一种方法来区分各种questions

此外- 如果我确保验证hidden input,并检查通过该hidden-input fieldpk是否属于允许用户投票的question,那会是一种负责任和安全的方式吗?

另一种方法是使用 AJAX

<button type="button" onclick="Voting(vote, pk)">Think</button>

此外,AJAX 允许您在不执行页面刷新的情况下与服务器通信

最新更新