这个问题与: 过滤中介 ManytoMany django
class Ingredient(Model):
name = CharField(max_length=55, unique=True)
def __str__(self):
return self.name
class Meta:
ordering = ('name',)
class Product(Model):
name = CharField(max_length=55)
def __str__(self):
return self.name
class Meta:
ordering = ('name', )
class ProductIngredient(Model):
product = ForeignKey(Product, on_delete=CASCADE, related_name='product_ingredients')
ingredient = ForeignKey(Ingredient, on_delete=CASCADE)
optional = BooleanField(default=False)
class Meta:
unique_together = (('product', 'ingredient'),)
ordering = ('product__name',)
def __str__(self):
return f'{self.product} - {self.ingredient}'
我想做两个查询:
- 选择所有成分不含草莓和牛奶的产品
- 选择所有成分不含草莓或牛奶的产品
在这种情况下,我完全迷失了。
参考您链接的问题,您可以将 Q 对象与.exclude()
一起使用,而不是.filter()
。您还可以通过在前面加上波浪号 (~( 来否定 Q 对象:
成分不含草莓和牛奶的商品
.filter(
~Q(product__ingredients__ingredient__name='strawberry') &
~Q(product__ingredients__ingredient__name='milk')
)
成分不含草莓或牛奶的商品
.filter(~Q(product__ingredients__ingredient__name__in=['strawberry', 'milk']))