Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 26, 2013 22:59:02

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

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

Здравствуйте.
Есть модели

class SpiderCharacteristicType(models.Model):
    name = models.CharField(_(u'Name'), max_length=255)
class SpiderCharacteristic(models.Model):
    characteristic_type = models.ForeignKey(SpiderCharacteristicType)
    value = models.CharField(_(u'Value'), max_length=255)
    item = models.ForeignKey(SpiderItem)
    
class SpiderItem(models.Model):
    article = models.CharField(_(u'Артикул'), max_length=255, help_text=u'')
    name = models.CharField(_(u'Наименование'), max_length=255, help_text=u'')
   

как мне сформировать запрос чтобы проверить наличие записи?

Делаю так, но что то не работает

mydict = {'article__exact': self.article,
          'vendor_id__exact': self.vendor_id,
            }
            
self.features = {}
if item[u'Цвет'] != '':
   self.features['color'] = item[u'Цвет']
if item[u'Размер'] != '':
   self.features['size'] = item[u'Размер']
mydict['spidercharacteristic__value'] = self.features.values()
try:
   self.obj = SpiderItem.objects.get(**mydict)
except ObjectDoesNotExist:    
   print 'error'

Тоесть если проверять одни значения, то он не находит уже созданный товар и заново его создает.
нужно как то проверять (characteristic_type='size', value=2), (characteristic_type='color', value=2)

P.S.
Если поменять
mydict['spidercharacteristic__value'] = self.features.values()
на
for self.dict_key, self.dict_value in self.features.items():
   mydict['spidercharacteristic__characteristic_type']=SpiderCharacteristicType.objects.get(name=self.dict_key)
   mydict['spidercharacteristic__value'] = self.dict_value
То направление как мне кажется верное, но в запрос попадает естественно только крайний ключ.



Офлайн

#2 Июнь 27, 2013 06:44:14

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

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

нихрена не понял



Офлайн

#3 Июнь 27, 2013 11:40:03

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

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

Как мне правильно составить запрос вида :
SpiderItem.objects.get(article__exact = self.article, vendor_id__exact =self.vendor_id, (spidercharacteristic__characteristic_type='color', spidercharacteristic__value='red'), (spidercharacteristic__characteristic_type='size', spidercharacteristic__value='s'))



Офлайн

#4 Июнь 27, 2013 11:46:52

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

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

тебе кажись нужна фильтрация. Используй фильтр и фильтр Q

SpiderItem.objects.filter(
  article__exact = self.article, 
  vendor_id__exact =self.vendor_id, 
  Q(spidercharacteristic__characteristic_type='color', 
  spidercharacteristic__value='red') | 
  Q(spidercharacteristic__characteristic_type='size', 
  spidercharacteristic__value='s'))

Отредактировано ilnur (Июнь 27, 2013 11:48:41)

Офлайн

#5 Июнь 27, 2013 12:19:12

Sergei
От:
Зарегистрирован: 2011-10-04
Сообщения: 29
Репутация: +  4  -
Профиль   Отправить e-mail  

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

SpiderItem - модель с двумя полями (ок, есть один FK на SpiderItem), а что такое
>SpiderItem.objects.get(хренова-туча-чего-то) автор и сам не вполне понимает

Не добавляйте никаких непонятных вам кусочков кода, это все лишнее:

for self.dict_key, self.dict_value in self.features.items():
Для чего тут self ? На квант времени подержать значение? Но это лирика.

Начните снова. Модели ваши видны, вопрос
wizard
как мне сформировать запрос чтобы проверить наличие записи?
к какой таблице/модели относился?
Три таблицы, в какой из них вы хотите проверить наличие записи?
Каковы критерии этой проверки? Забудьте пока про код, вы нехорошо на нем пока изъясняетесь, на пальцах, словами расскажите.



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

Офлайн

#6 Июнь 27, 2013 14:47:09

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

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

ilnur
тебе кажись нужна фильтрация. Используй фильтр и фильтр Q
Только мне нужно не OR а AND, а такой запрос с ошибкой выпадает

SpiderItem.objects.get(article='7261', Q(spidercharacteristic__characteristic_type=SpiderCharacteristicType.objects.get(name='size'),
  spidercharacteristic__value='S') , Q(spidercharacteristic__characteristic_type=SpiderCharacteristicType.objects.get(name='color'), 
  spidercharacteristic__value=u'сиреневый'))
...         
  File "<console>", line 1
SyntaxError: non-keyword arg after keyword arg



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

Офлайн

#7 Июнь 27, 2013 14:54:03

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'сиреневый'))
...         
[]



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

Офлайн

#8 Июнь 27, 2013 14:54:30

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

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

SpiderItem.objects.filter(
  article__exact = self.article, 
  vendor_id__exact =self.vendor_id, 
  Q(spidercharacteristic__characteristic_type='color', 
  spidercharacteristic__value='red') &
  Q(spidercharacteristic__characteristic_type='size', 
  spidercharacteristic__value='s'))
get возвращает 1 объект.
А у тебя как я понял может быть больше. Поэтому используй filter.

Офлайн

#9 Июнь 27, 2013 14:55:39

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

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

что возвращает МОЙ запрос?

Офлайн

#10 Июнь 27, 2013 14:57:05

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

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

т.к. SpiderCharacteristic имеет поле ссылку на объект SpiderItem, то из SpiderItem vожно добраться и до полей SpiderCharacteristic. обратной связью

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version