从群组开始,我想返回queryset
个项目,但如果该群组没有产品,则会从该群组中排除该群组分配给它的标签。
模型
class Group(models.Model):
name = models.CharField(max_length=50)
class Tag(models.Model):
name = models.CharField(max_length=50)
group = models.ForeignKey('Group', related_name='tags')
class Product(models.Model):
name = models.CharField(max_length=50)
tags = models.ManyToManyField('Tag', related_name='products')
这就是我的尝试:
Group.objects.all().exclude(tags__products__isnull=True)
上面似乎没有返回正确的结果。如果我在群组Red
和200cm
中有2个带有color
和width
代码的产品。一个产品的标签为红色,但另一个产品没有分配给一个组的标签,因此我希望返回一个组。上面的错误给我得到0?
另一个例子
Group 1 Color
Group 2 Width
Tag Red - FK to Group 1
Product 1 FK to tag Red
结果应该是只显示第1组,因为第2组没有带标签的产品。
答案 0 :(得分:3)
如果Model
Tag
中有另一个'color'
,则可以解释您描述的行为。如果该标记没有产品,则Group
会因为该标记而正确排除颜色组。你应该反过来接近它:
exclude
而不是
Group.objects.filter(tags__products__isnull=False)
# one tag with a product suffices to include the group -> intended!
答案 1 :(得分:-1)
Group.objects.all().exclude(tags__products__name='')
Django文档: https://docs.djangoproject.com/en/dev/ref/models/fields/#null