刚刚在 django 文档 中发现了这个
调用 none() 将创建一个从不返回任何对象的查询集,并且在访问结果时不会执行任何查询。 qs.none() 查询集是 EmptyQuerySet 的一个实例。
我构建了很多 CRUD 应用程序(令人惊讶),我想不出我需要使用 none()
的情况。
为什么要返回一个 EmptyQuerySet?
原文由 super9 发布,翻译遵循 CC BY-SA 4.0 许可协议
刚刚在 django 文档 中发现了这个
调用 none() 将创建一个从不返回任何对象的查询集,并且在访问结果时不会执行任何查询。 qs.none() 查询集是 EmptyQuerySet 的一个实例。
我构建了很多 CRUD 应用程序(令人惊讶),我想不出我需要使用 none()
的情况。
为什么要返回一个 EmptyQuerySet?
原文由 super9 发布,翻译遵循 CC BY-SA 4.0 许可协议
在您想要附加到查询集但想要一个空的开始的情况下类似于我们实例化一个空列表开始但逐渐向其添加有意义的值的情况示例..
def get_me_queryset(conditionA, conditionB, conditionC):
queryset = Model.objects.none()
if conditionA:
queryset |= some_complex_computation(conditionA)
elif conditionB:
queryset |= some_complex_computation(conditionB)
if conditionC:
queryset |= some_simple_computation(conditionC)
return queryset
get_me_queryset
should almost always return instance of django.db.models.query.QuerySet
(because good programming) and not None
or []
, or else it will introduce headaches later ..
这样即使没有任何条件出现 True
,您的代码仍将保持完整。不再进行类型检查
对于那些不理解 |
运算符在这里的用法的人:
queryset |= queryset2
它翻译成:
queryset = queryset + queryset
原文由 Arpit Singh 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
通常在您需要提供
QuerySet
的情况下,但没有提供 - 例如调用方法或提供模板。优点是,如果您 知道 不会有结果(或不想要结果)并且您仍然 需要 一个结果,
none()
不会访问数据库。举一个不现实的例子,假设您有一个 API,您可以在其中查询您的权限。如果帐户尚未确认,因为您已经拥有
Account
对象,您可以看到account.is_activated
是False
可以跳过-检查数据库仅使用权限Permission.objects.none()