繁体   English   中英

Django:允许用户只喜欢发帖一次

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM