无法访问 Django 模板中的 upvote/downvote 输入

Unable to access upvote/downvote input in a Django template

我正在通过以下方式从 Django 模板读取 upvote/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也通过了,使用类似的"hidden"输入标签我在上面省略了复制

看看我的输入标签。 value="{{ btn1.value }}" 应该引用被点击的相关按钮,将其值传递给视图,然后视图处理净选票。

但是我的 syntax/logic 不工作。你认为我做错了什么?请指教

其次,我不愿意在我的模板 中将整数值分配给 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")

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