Как работать со значениями «None» в запросах Django - PullRequest
8 голосов
/ 28 ноября 2009

У меня есть следующий запрос фильтра, который выполняет оператор SQL OR:

results = Stores.objects.filter(Q(title__icontains=prefs.address1) | Q(title__icontains=prefs.address2))

Это работает нормально, но если значения prefs.address1 и prefs.address2 (полученные из другой модели) в mySQL пустые, Django жалуется на следующую ошибку:

Невозможно использовать None в качестве значения запроса

Есть ли элегантный способ проверить, не являются ли значения моего фильтра пустыми, перед построением запроса фильтра ИЛИ?

Большое спасибо.

Ответы [ 2 ]

11 голосов
/ 28 ноября 2009

Вы можете сделать это, что легко обобщается на большее количество запросов

query = Q()
for search in (prefs.address1, prefs.address2):
    if search:
        query |= Q(title__icontains=search)
results = Stores.objects.filter(query)
3 голосов
/ 28 ноября 2009

Это

thefilter = Q(title__icontains=prefs.address1)
if prefs.address2 is not None:
    thefilter = thefilter | Q(title__icontains=prefs.address2)
results = Stores.objects.filter( thefilter)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...