@night_terror

Не выполняется Q() object запрос?

Есть следующая модель , которая должна описывать различные характеристики продукта:
class CharacteristicType(models.Model):
    name = models.CharField(_(u'Name'), max_length=255)
    slug = models.SlugField(_(u'Slug'), max_length=150, unique=True,
                            help_text=_(u'Slug for product url created from name.'))

class Characteristic(models.Model):
    characteristic_type = models.ForeignKey(CharacteristicType)
    value = models.CharField(_(u'Value'), max_length=255)
    product = models.ForeignKey(Product, verbose_name=_(u'Product'),
                                help_text=_(u'Referenced product'))


Пытаюсь выполнить запрос:
Product.objects.filter(Q(characteristic__characteristic_type__slug='brands') &  Q(characteristic__characteristic_type__slug = 'ingridient'))

который в моём понимании должен вернуть продукт, у которого присутствует две характеристики. Но этого не происходит. Хотя по отдельности запросы выполняются.
Как правильно сделать такой запрос?
  • Вопрос задан
  • 212 просмотров
Решения вопроса 1
О, этот просто замечательный запрос, решение для которого есть, но оно не самое явное:
https://docs.djangoproject.com/en/1.8/topics/db/qu... (крайне рекомендую внимательно прочитать)
У меня правда была другая ситуация я спокойно использовал последовательности фильтров, а оно приводило к непонятным выборкам.

в вашем случае должно быть так:
Product.objects.filter(characteristic__characteristic_type__slug='brands').filter(characteristic__characteristic_type__slug='ingridient')

и вот в случае "обратной связи" или связях многие ко многим, эти два отдельных фильтра, не тоже самое что записать всё в одном фильтре!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы