我不知道这是一个 django bug 还是一个功能,但我对 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,None]
查看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
它可以正常工作。
如何处理这个问题?
谢谢。
最佳答案
尝试使用此查询:
filters = Q(status__in =[0, 1,2] ) | Q(status__isnull=True)
关于python - 基于列表过滤查询集,包括 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2717282/