仅存在于指定列表中的ManyToMany项目的Django过滤器

n9vozmp4  于 2023-03-04  发布在  Go
关注(0)|答案(1)|浏览(117)

我有以下内容:

class Category():
    category_group = models.ManyToManyField("CategoryGroup", blank=True, related_name="category_group")

class CategoryGroup():
    label = models.TextField(null=True, blank=True)

categories = Category.objects.exclude(category_group__label__in=["keywords_1", "keywords_2"]

我希望排除组标签仅存在于keywords_1keywords_2中的类别。如果类别组标签存在于keywords_1keywords_3中,我不希望排除它。此查询需要做哪些更改?

zpgglvta

zpgglvta1#

您可以通过查找至少有一个项目不是keywords_1/keywords_2或没有项目的x1m0 n1 s来过滤掉此类项目,因此:

from django.db.models import Q

Category.objects.filter(~Q(category_group__label__in=["keywords_1", "keywords_2"])).distinct()

如果Category也可以没有关键字,我们也可以包括:

from django.db.models import Q

Category.objects.filter(
    ~Q(category_group__label__in=["keywords_1", "keywords_2"]) |
    Q(category_group=None)
).distinct()

相关问题