使用Django编写一个查询时遇到了很大的问题。我的模型(只有它的重要部分 - 关系)看起来像那样:
class User(models.Model):
name = models.CharField(unique=True)
class Topic(models.Model):
create_user = models.ForeignKey(User)
class Post(models.Model):
topic = models.ForeignKey(Topic)
user = models.ForeignKey(User)
它代表论坛应用程序的对象。我需要编写返回最活跃评论员的用户的查询 - 他未创建的主题中的最高职位数。在SQL中它看起来像这样:
select user_id, count(*)
from forum_app_post post
inner join forum_app_topic topic on topic.id = post.topic_id
where post.user_id != topic.create_user_id
group by user_id;
对我而言,很难通过&post; user.id!= topic.create_user_id'来过滤帖子。在Django。当我尝试在一个过滤器中使用两个字段时,我得到例外,我无法使用Django找到任何解决方法。我不想使用原始SQL(使用Cursor对象)。
非常感谢!
答案 0 :(得分:0)
怎么样:
Post.objects.exclude(user=F('topic__user')).values('user').annotate(Count('id'))
F允许自我引用查询集,因此我们会排除与其主题的创建者具有相同用户的帖子。然后我们只按user_id分组。