我有以下数据结构: FruitObject ,字段 FruitType 和 FruitColor 。另一方面,我有 FruitOffer (由用户输入)。它与 FruitObject 具有相同的字段,并且由用户输入(某种需求支持配对系统;我们输入FruitObjects和用户输入FruitOffers;任务是配对它们并查看用户拥有的内容为我们提供 - 仅为特定用户选择与FruitOffers相同的FruitObjects。
所以逻辑上我已经使用 __ 选项来获取所需的数据:
select = FruitObject.objects.filter(FruitType__in=FruitOffer.objects.filter(user=request.user).values("FruitType"))
现在给我带来了困难的部分 - 我需要将FruitColor添加到select并获得满足两个条件的多对多选择(对于每个fruitObject获取的提议对象, BOTH 的TYPE和COLOR)
select = FruitObject.objects.filter(FruitType__in=FruitOffer.objects.filter(user=request.user).values("FruitType"), FruitColor__in=FruitOffer.objects.filter(user=request.user).values("FruitColor"))
但是在这种情况下,逗号的运行更像是OR,并返回特定类型或特定颜色的所有值。
如何在__选择中添加 AND 条件?如果我想添加更多条件(如价格或品味),它会以同样的方式完成吗?提前谢谢。
答案 0 :(得分:2)
艰难的道路。
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'))))
答案 1 :(得分:1)
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) )
答案 2 :(得分:0)