在Django查询中提供LIMIT参数而不需要查询QuerySet

时间:2012-03-23 09:22:14

标签: sql django django-queryset

我的程序中有一个用于搜索实体的实用程序功能。它需要一个max_count参数。它返回一个QuerySet。

我希望此功能限制最大条目数。标准方法是从我的QuerySet中取出一个切片:

return results[:max_count]

我的问题是使用此功能的视图使用.order_by()以各种方式排序。这会导致异常,因为在切片后不允许重新排序。

是否可以在不进行切片的情况下强制将“LIMIT 1000”强加到我的SQL查询中?

2 个答案:

答案 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,然后在代码中切片以简化代码。