DJango - __in запрос к базе данных - PullRequest
1 голос
/ 31 мая 2011

У меня следующая структура данных: FruitObject с полями FruitType и FruitColor .С другой стороны, у меня есть FruitOffer (который вводится пользователем).Он имеет те же поля, что и FruitObject , и вводится пользователем (какая-то система сопряжения поддержки спроса; мы вводим FruitObjects и пользовательский ввод FruitOffers; задача состоит в том, чтобы соединить их и посмотреть, что пользователь может предложитьнас - чтобы выбрать только те FruitObjects, которые равны FruitOffers для конкретного пользователя).

Итак, логически я использовал __ в выделении для получения необходимых данных:

select = FruitObject.objects.filter(FruitType__in=FruitOffer.objects.filter(user=request.user).values("FruitType"))

Теперь самое сложное для меня - мне нужно добавить FruitColor в выборку и получить выбор «многие ко многим», удовлетворяющий обоим условиям (для каждого объекта FruitObject получить offerObject, который равен ОБА типа 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"))

Но запятая работает больше как ИЛИ в этом случае и возвращает мне все значения определенного типа или определенного цвета.

Как добавить условие И __ в выборе?Если я хотел бы добавить больше условий (таких как цена или вкус), будет ли это сделано таким же образом?Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 31 мая 2011

Трудный путь.

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 голос
/ 31 мая 2011
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) )
0 голосов
/ 31 мая 2011

Использовать Q объекты для поиска https://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...