我不知道它是一个django错误还是一个功能,但我对MySQL有一个奇怪的ORM行为。
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
它可以正常工作。
如何处理?
感谢名单。
答案 0 :(得分:1)
请尝试使用此查询:
filters = Q(status__in =[0, 1,2] ) | Q(status__isnull=True)
答案 1 :(得分:0)
在Article模型的外键属性中,您使用小写的's'引用status
。但是你的Status
模型有一个大写的'S'。不确定你的拼写错误在哪里,但是如果你的模型实际上是用小写的''定义的,那么这可能解释你所看到的奇怪的SQL。