django:参考投票系统中的具体评论

时间:2015-11-18 23:49:59

标签: python django

我无法为我的评论模型实施投票系统。我想要做的是类似于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方法可以做到,但似乎无法在文档中找到它。谢谢!

1 个答案:

答案 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]
    [...]