如何使用 Django ORM 排除列的多个值?

Posted

技术标签:

【中文标题】如何使用 Django ORM 排除列的多个值?【英文标题】:How to exclude multiple values of column using Django ORM? 【发布时间】:2020-03-24 19:03:46 【问题描述】:

我想过滤 mytable 并获取名称不包含 '''-' 值的行,为此我使用了以下查询但不起作用。

mytable.objects.exclude(name = ['','-']).order_by('name').count() 返回 2000 个所有行,而查询 mytable.objects.exclude(name = '').order_by('name').count() 工作正常并返回过滤后的 1460 个结果。

下面是我的 Postgresql 查询,它运行良好,返回 1450 结果,不包括 ['','-'] 的名称值。

select * from mytable where name != '-' and name != '' order by -id

【问题讨论】:

【参考方案1】:

试试这个。

mytable.objects.exclude(name__in=['', '-'])

这应该排除与您在列表中传递的值匹配的行。

而且您无需通过order_by() 来获取计数。

只需在查询集上直接使用.count()

【讨论】:

感谢好友,能够完成我的任务,顺便说一下,我使用order_by() 按名称和计数对值进行排序仅用于测试目的。

以上是关于如何使用 Django ORM 排除列的多个值?的主要内容,如果未能解决你的问题,请参考以下文章

Django ORM。如何排除旧数据?

Django ORM 可以对列的特定值执行 ORDER BY 吗?

Django ORM命令获取没有空字段的不同值

如果找到湮灭对,Django ORM 排除结果

如何在 node-orm 中检查列的 NULL 值

带有排除的 Django ORM 查询无法正常工作