【发布时间】:2015-11-18 23:49:59
【问题描述】:
我无法为我的评论模型实施投票系统。我正在尝试做的类似于 reddit 评论系统的工作方式。您对特定评论进行投票,您可以在该评论旁边看到一个小分数。
我感觉很接近,我只是不知道如何引用已投票的评论。
这是我的评论模型:
class Comments(models.Model):
name = models.TextField(default='Anon')
comment = models.TextField(max_length=2000, default='')
vote = models.IntegerField(default=0)
post = models.ForeignKey(Post)
user_comments = models.ForeignKey(User, related_name='comments', null=True)
我想要发生的是当用户点击投票按钮时,投票字段被更改并查看分数。
这是带有评论投票按钮的视图逻辑:
{% for c in comments %}
<br>
<a href="{% url 'user_profile' c.user_comments %}"> {{c.name}} </a> <br><br>
<p> {{c.comment}} </p> </br>
{% if user.is_authenticated %}
<form method="POST">
{% csrf_token %}
<input class='small' type='submit' value='+1' name='commentup'>
<input class='small' type='submit' value='-1' name='commentdown'>
</form>
<p> Score: {{c.vote}} </p>
{% endif %}
{% endfor %}
当按下投票或投票按钮时,会向我的视图发送一个 POST 请求。我的困惑始于视图逻辑:
def view_post(request, question_id):
tpost = get_object_or_404(Post, pk=question_id)
comments = tpost.comments_set.all()
[...]
#comment votes
if request.POST.get('commentup',''):
self.vote += 1
if request.POST.get('commentdown',''):
self.vote -=1
[...]
请注意,我使用 self.vote +=1,它不起作用。我想要做的是让那个特定评论的投票上升,基本上是自我正常做的事情。
我的问题是如何参考该特定评论并更改投票栏。我确定有一种 django 方法可以做到这一点,但似乎无法在文档中找到它。谢谢!
【问题讨论】:
-
...s包含重要代码,请添加 -
您的视图需要一种方法来了解哪些评论被赞成/反对,这就是为什么您需要传递评论的 ID 而不是问题的 ID。
-
那个id是找帖子的。在每个帖子上,可能有多个 cmets。我不知道如何获得已投票的评论