如何在 Django 中使用 itertools.chain 执行多个排除命令?

How to do multiple exclude commands using itertools.chain in Django?

假设我想 运行 exclude 命令重复从 exclude_list 获取变量,例如['aa', 'ab' 'ac'].

我可以使用循环来做到这一点:

for exclude_value in exclude_list:
     myQueryset.exclude(variable__startswith=exclude_value)

但是,我想使用 itertools.chain 命令来实现,因为我已经阅读过它可以这样做。有什么建议吗?

您的做法是正确的 - 除了一个小细节外,您没有保留排除项。 Django querysets are lazily evaluated, so running through a loop and continually chaining won't do anything,直到您尝试访问集合中的内容。

如果你这样做:

qs = MyModel.objects
for exclude_value in exclude_list:
    qs = qs.exclude(variable__startswith=exclude_value)

qs = None

数据库从未命中

所以这样做:

qs = MyModel.objects
for exclude_value in exclude_list:
    qs = qs.exclude(variable__startswith=exclude_value)

qs.count() # Or whatever you want the queryset for

你应该没问题,if/when你遇到了数据库变慢的问题,这很可能是因为查询中有大量的自由文本表达式,然后做一些分析,然后你就可以找到效率。

但我敢打赌上面的代码足以满足您的需求。