数据库查询中的DJango-uu

数据库查询中的DJango-uu,django,many-to-many,Django,Many To Many,我有以下数据结构:水果对象,带有水果类型和水果颜色字段。另一方面,我有水果供应(由用户输入)。它具有与水果对象相同的字段,并且由用户输入(某种需求支持配对系统;我们输入水果对象和用户输入水果优惠;任务是将它们配对,并查看用户提供给我们的内容-仅为特定用户选择与水果优惠相等的水果对象) 因此,从逻辑上讲,我在选择中使用了\u来获取所需的数据: select = FruitObject.objects.filter(FruitType__in=FruitOffer.objects.filter(us

我有以下数据结构:水果对象,带有水果类型水果颜色字段。另一方面,我有水果供应(由用户输入)。它具有与水果对象相同的字段,并且由用户输入(某种需求支持配对系统;我们输入水果对象和用户输入水果优惠;任务是将它们配对,并查看用户提供给我们的内容-仅为特定用户选择与水果优惠相等的水果对象)

因此,从逻辑上讲,我在
选择中使用了\u来获取所需的数据:

select = FruitObject.objects.filter(FruitType__in=FruitOffer.objects.filter(user=request.user).values("FruitType"))
现在对我来说最困难的部分来了-我需要将水果颜色添加到选择中,并获得满足这两个条件的多对多选择(对于每个水果对象,获取类型和颜色都的offerObject)

但逗号的操作更像或,在本例中,它返回所有特定类型或特定颜色的值

如何将条件添加到select中?如果我想增加更多的条件(如价格或口味),会以同样的方式进行吗?提前谢谢。

辛苦了

FruitObject.objects.filter(reduce(operator.or_, (Q(FruitColor=color, FruitType=type) for (color, type) in FruitOffer.objects.filter(user=request.user).values_list('FruitColor', 'FruitType'))))

使用Q对象进行查找

这是交叉匹配,而不是内部匹配;如果存在
A×1
B×2
,这也将匹配
A×2
B×1
。是的,Ignacio是正确的,它是交叉匹配,返回等于A、B、1或2的所有值。不是等于A1和B2的值
FruitObject.objects.filter(reduce(operator.or_, (Q(FruitColor=color, FruitType=type) for (color, type) in FruitOffer.objects.filter(user=request.user).values_list('FruitColor', 'FruitType'))))
from django.db.models import Q
fruit_type = FruitOffer.objects.filter(user=request.user).values("FruitType")
fruit_color= FruitOffer.objects.filter(user=request.user).values("FruitColor")

select = FruitObject.objects.filter( Q(FruitType__in=fruit_type)) & Q(FruitColor__in=fruit_color) )