我想在给定主键的查询集中找到相邻的项目,如here所述。但是我希望这适用于任何给定的查询集,我没有为自己设置排序。如何找到__gt
和__lt
过滤的查询集的当前顺序?
例如:
queryset = MyModel.objects.all().order_by('some_field')
next_obj = get_next(queryset, after_pk, 10)
...
def get_next(queryset, pk, n):
#ordering is unknown here
obj = queryset.get(pk=pk)
field = queryset.get_order_by_field_name() #???
return queryset.filter(**{field+'__gt': getattr(obj, field)})[:n]
答案 0 :(得分:6)
您可以通过访问queryset.query.order_by
属性来检索order_by子句中的列列表。
来自django docs:
query属性是一个不透明的对象。它表示查询构造的内部,不是公共API的一部分。但是,如此处所述,对属性的内容进行pickle和unpickle是安全的(并且完全支持)。