簡體   English   中英

如何在Django中通過外鍵對過濾查詢?

[英]How to filter query by pair of foreign keys in Django?

我在使用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;

對我而言,最難的部分是在Django中通過“ post.user_id!= topic.create_user_id”過濾帖子。 當我嘗試在一個過濾器中使用兩個字段並且無法使用Django找到任何解決方法時,出現異常。 我不想使用原始SQL(使用Cursor對象)。

非常感謝!

關於什么:

Post.objects.exclude(user=F('topic__user')).values('user').annotate(Count('id'))

F允許對查詢集進行自我引用,因此我們排除了與主題創建者具有相同用戶的帖子。 然后,我們僅按user_id分組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM