python - 基于列表过滤查询集,包括 None

标签 python sql mysql django orm

我不知道这是一个 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/

相关文章:

java - Liquibase 在检查主键不存在时失败

python - 我如何计算每行中不同的特定字符的出现次数

python - 如何克隆列表以使其在分配后不会意外更改?

sql - 如何从 Oracle CSV 导出中删除注释行?

mysql - 触发语法问题

mysql - SQL命令建议

python - Python itertools.product() 实现的解释?

带有原始套接字的python套接字setsockopt

sql - CLOB/TEXT 对性能有影响吗?

mysql - 如何获得第一笔存款