我是一个孩子设为
的过滤器ParentModel.objects.all().prefetch_related(
Prefetch(
lookup='childrenmodel_set',
queryset=ChildrenModel.objects.exclude(is_active=False)
)
)
现在每个ParentModel对象都可以有一个childrenmodel_set
,但其中一些查询集是空的。
如何排除那些没有孩子的ParentModel
个对象?
我想到了:
ParentModel.objects.all().prefetch_related(
Prefetch(
lookup='childrenmodel_set',
queryset=ChildrenModel.objects.exclude(is_active=False)
)
).exclude(childrenmodel_set=None)
或
ParentModel.objects.all().prefetch_related(
Prefetch(
lookup='childrenmodel_set',
queryset=ChildrenModel.objects.exclude(is_active=False)
).aggregate(num_objects=Count(id))
).exclude(num_objects=0)
或
ParentModel.objects.all().prefetch_related(
Prefetch(
lookup='childrenmodel_set',
queryset=ChildrenModel.objects.exclude(is_active=False)
)
).annotate(childrenset_size=Count(childrenset)).exclude(childrenset_size=0)
我当然可以在模板中检查这个,但我想在数据库级别上进行检查。
现在我的代码是
self.model.objects.prefetch_related(
Prefetch(
lookup='periods',
queryset=Period.objects.exclude(is_active=False)
)
).exclude(periods__isnull=True)
删除那些没有句点的对象。但是,如果一个对象只有非活动周期,它仍然在查询集中表示。如何让exclude
考虑预取?
我的模特
class Article:
name = CharField(max_length=100)
class Period:
article = ForeignKey(Article)
is_active = BooleanField(default=True)
答案 0 :(得分:0)
ParentModel.objects.exclude(childrenmodel_set__isnull=True)