一对多有排除

时间:2015-12-04 14:46:21

标签: django django-orm

我有一个模型A和一个具有ForeignKey到A(一对多关系)的模型B.我有一个“B”项目的ID列表,我的用户不能看到(称为forbidden_list,但我想找到任何“A”,其中包含任何不在该列表中的“B”,甚至如果它有B在列表中。如果我做A.objects.exclude(child__id__in=forbidden_list),我得到任何A没有任何禁止B作为孩子,但我没有得到A既有想要也有不想要的B.

1 个答案:

答案 0 :(得分:1)

试试这个:

from django.db.models import Count

A.objects
 .annotate(total_b=Count(child__id))
 .annotate(excluded_b=Count(child__id__in=forbidden_list))
 .exclude(total_b=excluded_b)