2016-03-04 5 views
3

Веб-сайт содержит фотографии pantsu от ecchi animes, с возможными исследованиями по цвету, имени персонажа, имени аниме и типу нижнего белья, без какой-либо важности с заказом, который вы выбрали критериев.Django запрос, показывающий только первый результат

мой Pantsu таблица имеет 3 ForeignKey -> Цвет, тип, девушки

мой стол девушки есть один ForeignKey аниме.

давайте предположим, что это:

>>> girlList = Girl.objects.all() 
>>> girlList 
>>> [<Girl: Hanekawa Tsubasa>, <Girl: Hachikuji Mayoi>, <Girl: Hitagi Senjōgahara>] 

Хорошо, это то, что мы хотели, но теперь, еще одна вещь:

>>> Color.objects.filter(pantsu__P_Girl__Girl_Name='Hachikuji Mayoi')  
[Color: White] 

Это все еще правильно, эта девушка в настоящее время только один Pantsu на моем дБ и он белый. Теперь это:

>>> Color.objects.filter(pantsu__P_Girl__Girl_Name='Hanekawa Tsubasa')  
[Color: Black, Color: Pink] 

Correct снова, но здесь идет неправильно часть, если я хочу, чтобы получить цвет всех девочек из моей БД, только имея эти 2 девочки, я хотел бы получить результат, как, [белый , Pink, Black] или что-то в этом роде, но я этого не делаю. Посмотрите.

Color.objects.filter(pantsu__P_Girl=girlList) 
[Color: Pink, Color: Black] 

я только получить результаты первого элемента из моих querysets, здесь я получаю розовый и черный, потому что первый элемент girlList является Ханекава Tsubasa, и она совпадает с розовым и черным.

Почему я не могу получить результат, соответствующий каждому полю набора запросов? Я что-то упускаю ?

+0

Было бы лучше, если бы вы могли показать соответствующие части модели, а не описание их. – Sayse

+2

Является ли 'girlList' список из двух объектов девушки? Тогда вам, вероятно, понадобится «Color.objects.filter» (pantsu__P_Girl__in = girlList) ' – ilse2005

+0

@ ilse2005 -' girlList' - это исходный запрос на все, что я думаю (фрагмент 1) – Sayse

ответ

2

Использование __in

Color.objects.filter(pantsu__P_Girl__in=girlList) 

__in принимает список в качестве входных данных и возвращает все записи с атрибутом Девушка, связанной с каким-либо из элементов в списке

Но за вопрос, если girlList всегда Girl.objects.all(), то вы можете использовать:

Color.objects.filter(pantsu__P_Girl_isnull=False) 

или

from django.db.models import Q 
Color.objects.filter(~Q(pantsu__P_Girl=None)) 

Это отфильтровывает все цветовые объекты, которые не имеют девушки, как None

+0

Вот и все. Большое спасибо, я попытаюсь найти, где док говорит об этом и посмотреть, что еще я мог пропустить. – Wolorin

+0

Я связал документы в своем ответе;) – ilse2005

4

Ok так girllist список вы должны использовать __in:

Color.objects.filter(pantsu__P_Girl__in=girlList) 

в противном случае он будет использовать только первую запись в списке.

+0

Хотя верно, я не могу не думать, что theres, возможно, более эффективный запрос, поскольку girl_list содержит каждую девушку. – Sayse

+0

Вот и все! Спасибо, это работает ! – Wolorin

+1

@Sayse. Тогда я думаю, что мы можем использовать '~ Q (pantsu__P_Girl = None)', если это всегда все объекты Girl –

Смежные вопросы