фильтровать набор запросов на основе списка, включая None - PullRequest
0 голосов
/ 27 апреля 2010

Я не знаю, является ли это ошибка django или функция, но у меня странное поведение ORM с MySQL.

class Status(models.Model):
    name = models.CharField(max_length = 50)

class Article(models.Model)
    status = models.ForeignKey(status, blank = True, null=True)


filters = Q(status__in =[0, 1,2] ) | Q(status=None) 
items = Article.objects.filter(filters) 

возвращает элементы товара, но некоторые имеют статус, отличный от запрошенного [0,1,2, нет]

глядя на запрос sql:

SELECT [..] FROM `app_article` LEFT OUTER JOIN `app_status` ON (`app_article`.`status_id` = `app_status`.`id`) WHERE (`app_article`.`status_id` IN (1, 2) OR `app_status`.`id` IS NULL) ORDER BY [...]

часть OR app_status.id IS NULL, кажется, причина. если я изменю его на OR app_article.status_id IS NULL, он будет работать правильно.

Как с этим бороться?

Thanx.

Ответы [ 2 ]

1 голос
/ 27 апреля 2010

Попробуйте использовать этот запрос вместо:

filters = Q(status__in =[0, 1,2] ) | Q(status__isnull=True) 
0 голосов
/ 27 апреля 2010

В атрибуте внешнего ключа для модели Article вы ссылаетесь на status со строчными буквами 's'. Но ваша Status модель имеет заглавную букву 'S'. Не уверен, где ваша опечатка, но в случае, если ваша модель на самом деле определяется строчными буквами 's', это может объяснить странный SQL, который вы видите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...