我无法为我的评论模型实施投票系统。我想要做的是类似于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 %}
按下voteup或votedown按钮时,会向我的视图发送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方法可以做到,但似乎无法在文档中找到它。谢谢!
答案 0 :(得分:1)
尝试将注释的<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.main.class>com.test.service.MainTester</java.main.class>
</properties>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>${java.main.class}</mainClass>
</configuration>
</plugin>
值作为隐藏输入字段传递,然后使用id
方法查找注释并在视图中对其进行操作。例如:
filter
然后在视图中:
{% 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'>
<input type='hidden' value='{{c.id}}' name='commentID'>
</form>
<p> Score: {{c.vote}} </p>
{% endif %}
{% endfor %}
此外,您需要在对对象进行更改后保存对象。所以在视图中,您可以这样做:
def view_post(request, question_id):
tpost = get_object_or_404(Post, pk=question_id)
comment = tpost.comments_set.filter(pk=request.POST['commentID'])[0]
[...]