【问题标题】:django: Referring to a specific comment in a voting systemdjango:引用投票系统中的特定评论
【发布时间】: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。我不知道如何获得已投票的评论

标签: python django


【解决方案1】:

尝试将评论的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]
    [...]

此外,您需要在对对象进行更改后保存它。所以在视图中,你可以这样做:

if request.POST.get('commentup', ''): self.vote += 1
if request.POST.get('commentdown', ''): self.vote -= 1
self.save()

【讨论】:

    猜你喜欢
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    相关资源
    最近更新 更多