2015-01-16 2 views
0

Я хочу сделать или добавить фильтры Django. Код, который у меня есть, кажется легким, но он не работает. Я много читал для ответов, но ничего не работало для меня. В чем вина?Django Q объект не работает

from django.db.models import Q 
from models import Processoren 

cpu = [ 
    "Intel", 
    "AMD" 
] 

queryset = Processoren.objects.filter(Q(naam__contains=cpu[0]) | Q(naam__contains=cpu[1])) 

#queryset = Processoren.objects.filter(naam__contains=cpu[0]) 

print queryset 

Прокомментированная строка кода работает, но одна из них не указана.

Вот документация объекта Q: https://docs.djangoproject.com/en/1.7/topics/db/queries/#complex-lookups-with-q-objects

А вот связанный с этим вопрос, но это не работает для меня: How to use OR using Django's model filter system?

Что не так или что я забыл?

+0

Каково отношение к mongoengine? Является ли «Processoren» моделью mongoengine? – Ross

+0

@Ross Это модель из models.py – Sanderr

+0

Модель Django или модель MongoEngine - это разница, поскольку MongoEngine не поддерживает Django Q, но модель django должна. – Ross

ответ

0

Этот код работает должным образом. Он производит довольно правильный SQL-запрос:

SELECT "app_processoren"."id", "app_processoren"."naam" 
FROM "app_processoren" 
WHERE ("app_processoren"."naam" LIKE '%Intel%' OR 
     "app_processoren"."naam" LIKE '%AMD%') 

Что-то не так с вашими данными. Убедитесь в том, что записи с naam='AMD' существуют? Может быть, у них разный случай (например, «Амд»)? Попробуйте __icontains вместо простого __contains.

+0

Спасибо за ваше время. Да, я уверен, что работает, потому что эта строка работает нормально: 'queryset = Processoren.objects.filter (naam__contains = cpu [0])' Также, если я это делаю: 'cpu [1]', я также пробовал значки. Итак, мы можем исключить, что данные верны? – Sanderr