[英]Django: allowing user to like post only once
刚刚在Django上编写了一个函数,允许用户每个帖子只投票一次(bug)。 正如您将看到通过按下链接完成的。 只想知道用户投票一次后是否可以隐藏投票按钮? 这是代码,希望它有所帮助:
views.py:
def vote(request, bug_id):
bug = get_object_or_404(BugTable, pk=bug_id)
if request.user.is_authenticated:
bug.vote += 1
try:
Vote.objects.create(bug=bug, user=request.user)
bug.save()
except IntegrityError:
messages.success(request, 'You already voted for this bug')
return redirect(bugfix)
return render(request, 'detail.html', {'bug': bug})
models.py
class BugTable(models.Model):
author = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
bug_name = models.CharField(max_length=50, blank=False)
vote = models.IntegerField(default=0)
def __str__(self):
return self.bug_name
class Vote(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
bug = models.ForeignKey(BugTable, on_delete=models.CASCADE,
related_name='voter')
class Meta:
unique_together = ('user', 'bug')
detail.html
{% block features %}
<h5 style="margin-top: 10px;"><strong>{{ bug.bug_name }}</strong></h5>
<a href="{% url 'vote' bug.id %}">Vote</a>
{{ bug.vote}}
{% endblock %}
尝试使用.hide方法的jQuery简单函数,没有用。 可能只有输入{%if%}函数才能使用? 谢谢你的建议
有多种方法可以做到这一点,最简单的方法是计算当前用户是否在视图中投票并在模板中提供:
views.py:
def vote(request, bug_id):
bug = get_object_or_404(BugTable, pk=bug_id)
current_user_voted = bug.voter.filter(user=request.user).exists()
if request.user.is_authenticated:
bug.vote += 1
try:
Vote.objects.create(bug=bug, user=request.user)
bug.save()
except IntegrityError:
messages.success(request, 'You already voted for this bug')
return redirect(bugfix)
return render(request, 'detail.html', {'bug': bug, 'current_user_voted': current_user_voted})
details.html:
{% block features %}
<h5 style="margin-top: 10px;"><strong>{{ bug.bug_name }}</strong></h5>
{% if not current_user_voted %}
<a href="{% url 'vote' bug.id %}">Vote</a>
{% endif %}
{{ bug.vote }}
{% endblock %}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.