DJango - __in数据库查询

时间:2011-05-31 08:25:42

标签: django many-to-many

我有以下数据结构: 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 条件?如果我想添加更多条件(如价格或品味),它会以同样的方式完成吗?提前谢谢。

3 个答案:

答案 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)