Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 27, 2013 15:02:41

wizard
От:
Зарегистрирован: 2009-02-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите составить запрос.

У меня и должно вернуть только один ответ, если больше то ошибку.

Вот делаю простой запрос есть ли данные

>>> SpiderCharacteristic.objects.filter(item=SpiderItem.objects.get(article='14773'))
[<SpiderCharacteristic: color - сиреневый>, <SpiderCharacteristic: size - S>]
Данные есть

делаю запрос с использованием этих данные
>>>SpiderItem.objects.filter(Q(spidercharacteristic__characteristic_type=SpiderCharacteristicType.objects.get(name='size'), spidercharacteristic__value='S') & Q(spidercharacteristic__characteristic_type=SpiderCharacteristicType.objects.get(name='color'), spidercharacteristic__value=u'сиреневый'))
...         
[]

он ничего не находит.



Офлайн

#2 Июнь 27, 2013 15:07:42

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

Помогите составить запрос.

мой запрос что возвращает?

Офлайн

#3 Июнь 27, 2013 15:10:04

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите составить запрос.

spidercharacteristic__characteristic_type=SpiderCharacteristicType.objects.get(name='size')
#
# equal
#
spidercharacteristic__characteristic_type__name="size"



Офлайн

#4 Июнь 27, 2013 15:12:07

wizard
От:
Зарегистрирован: 2009-02-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите составить запрос.

>>> SpiderItem.objects.filter(Q(spidercharacteristic__characteristic_type=SpiderCharacteristicType.objects.get(name='size'),
  spidercharacteristic__value='S') |  Q(spidercharacteristic__characteristic_type=SpiderCharacteristicType.objects.get(name='color'), 
  spidercharacteristic__value=u'сиреневый'))
...         
[<SpiderItem: 14908>, <SpiderItem: 14783 >, <SpiderItem: 14781>, <SpiderItem: 14774>, <SpiderItem: 14773>, <SpiderItem: 14773>, <SpiderItem: 14769>]

Но это OR в таблице точно есть записи с size=S или color=сиреневый, а чтобы и то и то только одна запись.



Отредактировано wizard (Июнь 27, 2013 15:12:27)

Офлайн

#5 Июнь 27, 2013 15:19:38

wizard
От:
Зарегистрирован: 2009-02-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите составить запрос.

FishHook
spidercharacteristic__characteristic_type=SpiderCharacteristicType.objects.get(name='size')
#
# equal
#
spidercharacteristic__characteristic_type__name="size"

>>>SpiderItem.objects.filter(Q(spidercharacteristic__characteristic_type=SpiderCharacteristicType.objects.get(name='size'), spidercharacteristic__value='S') | Q(spidercharacteristic__characteristic_type=SpiderCharacteristicType.objects.get(name='color'), spidercharacteristic__value=u'сиреневый'))
[<SpiderItem: 14908>, <SpiderItem: 14783>, <SpiderItem: 14781>, <SpiderItem: 14774>, <SpiderItem: 14773>, <SpiderItem: 14773>, <SpiderItem: 14769>]

>>> SpiderItem.objects.filter(Q(spidercharacteristic__characteristic_type__name='size', spidercharacteristic__value='S') |  Q(spidercharacteristic__characteristic_type__name='color', spidercharacteristic__value=u'сиреневый'))
[]



Отредактировано wizard (Июнь 27, 2013 15:23:03)

Офлайн

#6 Июнь 27, 2013 15:23:29

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите составить запрос.

а так

SpiderItem.objects.filter( (Q(spidercharacteristic__characteristic_type__name='size') & 
Q(spidercharacteristic__value='S')) |  (Q(spidercharacteristic__characteristic_type__name='color') & Q(spidercharacteristic__value=u'сиреневый')))



Офлайн

#7 Июнь 27, 2013 15:27:56

wizard
От:
Зарегистрирован: 2009-02-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите составить запрос.

>>> SpiderItem.objects.filter( (Q(spidercharacteristic__characteristic_type__name='size') & 
Q(spidercharacteristic__value='S')) |  (Q(spidercharacteristic__characteristic_type__name='color') & Q(spidercharacteristic__value=u'сиреневый')))
[]
Пусто

Ради простой проверки
>>> SpiderItem.objects.filter(spidercharacteristic__characteristic_type__name='size', spidercharacteristic__value='S')
[<SpiderItem: 14781>, <SpiderItem: 14773>, <SpiderItem: 14769>]



Офлайн

#8 Июнь 27, 2013 16:21:30

wizard
От:
Зарегистрирован: 2009-02-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите составить запрос.

вот так отработало

>>> SpiderItem.objects.filter(spidercharacteristic__characteristic_type=SpiderCharacteristicType.objects.get(name='size'), spidercharacteristic__value='S').filter(spidercharacteristic__characteristic_type=SpiderCharacteristicType.objects.get(name='color'), spidercharacteristic__value=u'сиреневый')
[<SpiderItem: 14773>]

Тока тогда как мне динамически подгружать
.filter(spidercharacteristic__characteristic_type=SpiderCharacteristicType.objects.get(name='color'), spidercharacteristic__value=u'сиреневый')

так как у одних товаров это есть у других нет?



Офлайн

#9 Июнь 27, 2013 17:44:06

wizard
От:
Зарегистрирован: 2009-02-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите составить запрос.

Почему тогда не отрабатывает такой запрос

SpiderItem.objects.filter(Q(spidercharacteristic__value='S') & Q(spidercharacteristic__value=u'сиреневый'))

Если вот такой работает правильно
SpiderItem.objects.filter(spidercharacteristic__value='S').filter(spidercharacteristic__value=u'сиреневый')



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version