我正在以下列方式从Django模板中读取vote / downvote:
<form method="POST" action="{% url 'vote' %}" class="vote_form">
{% csrf_token %}
<input type="hidden" id="id_value" name="value" class="hidden_id" value="{{ btn1.value }}" />
<button type="input" name="btn1" value="1">upvote</button>
<button type="input" name="btn1" value="-1">downvote</button>
</form>
注意:投票的对象和创建投票的user_id也会被传递,使用类似的&#34;隐藏&#34;输入标签我省略了上面的复制
查看我的输入标签。 value="{{ btn1.value }}"
应该引用被点击的相关按钮,将其值传递给视图,然后处理网络投票。
但我的语法/逻辑不起作用。你认为我做错了什么?请指教。
其次,我在我的模板中为upvote / downvote 分配一个整数值感到很不舒服。必须有一个更安全的方法来做到这一点。在这方面的任何准备都非常受欢迎!
P.S。作为参考,我认为发生了以下情况:
class VoteFormView(FormView):
form_class = VoteForm
def form_valid(self, form):
link = get_object_or_404(Link, pk=form.data["link"])
user = self.request.user
val= form.data["value"]
prev_votes = Vote.objects.filter(voter=user, link=link)
has_voted = (prev_votes.count() > 0)
if not has_voted:
Vote.objects.create(voter=user, link=link, value=val)
else:
prev_votes[0].delete()
return redirect("home")
答案 0 :(得分:1)
type="input"
不是有效的按钮类型。我完全摆脱了隐藏的输入,并将按钮更改为输入:
<form method="POST" action="{% url 'vote' %}" class="vote_form">
{% csrf_token %}
<input type="submit" name="btn1" value="upvote">
<input type="submit" name="btn1" value="downvote">
</form>
然后,在您的视图中,您可以使用:
if request.method == 'POST':
btn1 = request.POST.get('btn1')
if btn1 == 'upvote':
# Do the upvote
elif btn1 == 'downvote':
# Do the downvote