通过排序获取查询集的当前order_

joz*_*yqk 5 django django-orm django-queryset

我想在给定主键的查询集中找到相邻项,如此处所示。但是我希望这对于任何给定的查询集都有效,但我尚未为自己设置顺序。如何找到查询集的当前排序__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]
Run Code Online (Sandbox Code Playgroud)

该模型可以定义默认的排序方式,我可以检查queryset是否已排序,但在这种情况下我都不认为有帮助。

小智 7

您可以通过访问queryset.query.order_by属性从order_by子句检索列的列表。

从Django文档中:

查询属性是不透明的对象。它代表查询构造的内部,而不是公共API的一部分。但是,如此处所述,腌制和解开属性的内容是安全的(并且完全受支持)。