我的程序中有一个用于搜索实体的实用程序功能。它需要一个max_count
参数。它返回一个QuerySet。
我希望此功能限制最大条目数。标准方法是从我的QuerySet中取出一个切片:
return results[:max_count]
我的问题是使用此功能的视图使用.order_by()
以各种方式排序。这会导致异常,因为在切片后不允许重新排序。
是否可以在不进行切片的情况下强制将“LIMIT 1000”强加到我的SQL查询中?
答案 0 :(得分:1)
在results[:max_count]
之后的视图中.order_by()
。不要害怕从DB请求太多,查询将不会被评估直到切片(甚至在切片之后)。
答案 1 :(得分:0)
您可以通过简单地忽略每个切片并在__getitem__中最后执行[:max_count]来继承QuerySet来实现这一点,但我不认为它对复杂和副作用有价值。
如果您担心大型查询集的内存消耗,请按照http://www.mellowmorning.com/2010/03/03/django-query-set-iterator-for-really-large-querysets/
进行操作正常使用时,请遵循DrTyrsa的建议。您可以编写快捷方式来缩短order_by,然后在代码中切片以简化代码。