如何修复:类型错误:查询集.annotate()接收到非表达式:eqmuni

2024-06-11 07:31:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我在我的网站上添加了一个类似的功能,用户可以喜欢彼此的帖子。在

我已经成功地做到了,但是有一个问题。这是在检查用户是否已经喜欢这个帖子,这必须在我的主视图中具体执行。在

这样我就可以呈现我的主页了。为了解决这个问题,我在检索帖子时对其执行.annotate(),并查看用户是否喜欢某个帖子。在

然后我将这个传递到我的主模板上,并检查用户是否存在于posts likes属性中。在

这是相关代码。在

在模型.py公司名称:

class Post(models.Model):
    file = models.ImageField(upload_to='images/')
    summary = models.TextField(max_length=600)
    pub_date = models.DateTimeField(auto_now=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    likes = models.ManyToManyField(User, through='Like', related_name='likes')

    def __str__(self):
        return self.user.username

    def pub_date_pretty(self):
        return self.pub_date.strftime('%b %e %Y')

    def summary_pretty(self):
        return self.summary[:50]

    @property
    def total_likes(self):
        return self.likes.count()

class Like(models.Model):
    status = models.BooleanField()
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

在视图.py公司名称:

^{pr2}$

在主页.html公司名称:

{% if liked_or_not == True %}
      <a href="javascript:{document.getElementById('likepost{{ post.id }}').submit()}"><button class="btn btn-primary btn-lg btn-block"><span class="oi oi-caret-top"></span> Unlike {{ post.total_likes }} </button></a>
{% else %}
      <a href="javascript:{document.getElementById('likepost{{ post.id }}').submit()}"><button class="btn btn-primary btn-lg btn-block"><span class="oi oi-caret-top"></span> Like {{ post.total_likes }} </button></a>
{% endif %}
<form id="likepost{{ post.id }}" method="POST" action="{% url 'likepost' post.id %}">
  {% csrf_token%}
  <input type="hidden">
</form>

Tags: selfidreturnmodelsdef公司buttonpost
1条回答
网友
1楼 · 发布于 2024-06-11 07:31:55

我不太明白你想做什么。如果要检查用户是否至少喜欢一篇文章,可以这样做:

liked_or_not = Like.objects.filter(user=request.user).exists

如果您想检查用户是否喜欢某个特定的帖子,您可以这样点:

^{pr2}$

注释有不同的目的。它用提供的查询表达式列表注释QuerySet中的每个对象。表达式可以是简单值、对模型(或任何相关模型)上字段的引用,也可以是在与查询集中的对象相关的对象上计算的聚合表达式(平均值、总和等)。在这里阅读更多https://docs.djangoproject.com/en/2.2/ref/models/querysets/#annotate

相关问题 更多 >