Форум сайта python.su
Здравствуйте.
Есть модели
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'
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
Офлайн
нихрена не понял
Офлайн
Как мне правильно составить запрос вида :
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'))
Офлайн
тебе кажись нужна фильтрация. Используй фильтр и фильтр 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)
Офлайн
SpiderItem - модель с двумя полями (ок, есть один FK на SpiderItem), а что такое
>SpiderItem.objects.get(хренова-туча-чего-то) автор и сам не вполне понимает
Не добавляйте никаких непонятных вам кусочков кода, это все лишнее:
for self.dict_key, self.dict_value in self.features.items():
wizardк какой таблице/модели относился?
как мне сформировать запрос чтобы проверить наличие записи?
Отредактировано Sergei (Июнь 27, 2013 12:19:48)
Офлайн
ilnurТолько мне нужно не OR а AND, а такой запрос с ошибкой выпадает
тебе кажись нужна фильтрация. Используй фильтр и фильтр Q
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)
Офлайн
>>> 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)
Офлайн
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'))
Офлайн
что возвращает МОЙ запрос?
Офлайн
т.к. SpiderCharacteristic имеет поле ссылку на объект SpiderItem, то из SpiderItem vожно добраться и до полей SpiderCharacteristic. обратной связью
Офлайн