在 Django 中使用“.filter().filter().filter()...”有缺点吗?

2024-04-27

以下两个调用是否解析为 Django 中的等效 SQL 查询?

链接多个调用

Model.objects \
.filter(arg1=foo) \
.filter(arg2=bar) \
...

将所有参数包装在一起:

Model.objects \
.filter(arg1=foo, arg2=bar)

我希望代码具有可读性(过滤器调用比我显示的要多得多),但前提是不牺牲性能。


Update:

忽略这个答案。更好地看到这一点,正确答案 https://stackoverflow.com/a/8164920。 谢谢@Sam https://stackoverflow.com/users/150999/sam请注意。

旧答案:

以下两个调用是否解析为 Django 中的等效 SQL 查询?

简短的回答:是的。他们将生成等效的查询。

我用我正在使用的模型验证了这一点。产生的查询在功能上是相同的。不同的filter条件是AND在查询中一起编辑。

我希望代码具有可读性(过滤器调用比我显示的要多得多),但前提是不牺牲性能。

实现可读性的一种方法是使用字典来收集所有过滤条件。例如

conditions = dict(arg1 = foo, arg2 = bar, ....)
conditions.update(argN = baz)

Model.objects.filter(**conditions)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Django 中使用“.filter().filter().filter()...”有缺点吗? 的相关文章

随机推荐