帖子可能被分配到一个或多个类别,并且类别可能包含多个帖子。
这是我的模特:
class Category(models.Model):
name = models.CharField(max_length=31)
class Post(models.Model):
title = models.CharField(max_length=127)
content = models.TextField()
category = models.ManyToManyField(Category)
我不知道如何获取分配了至少一个帖子的所有类别,而不查询所有类别并进行循环检查。
答案 0 :(得分:2)
您可以在反向管理器中使用isnull
查找:
Category.objects.filter(post__isnull=False)
答案 1 :(得分:2)
以下查询将解决问题:
Category.objects.filter(post__isnull=False).distinct()
过滤器将在{{1}上执行LEFT OUTER JOIN
(由于__isnull
应该为False
,因此优化为简单的JOIN
) }表,因此将保留post_category
不是JOIN
的所有post_id
行。
如果该类别具有多个相关的NULL
,则.distinct()
是必需的(当然不是严格必须的),以避免多次返回 same Category
。该查询将在Post
表上进行JOIN
,因此通过使用post_category
就像乘数一样,我们可以避免这种情况。
相反:类别无 a .distinct()
不需要此Post
,因为.distinct()
行仅在以下情况出现一次没有实际职位:
NULL