通过订购

时间:2015-08-21 12:28:35

标签: django django-queryset django-orm

我想在给定主键的查询集中找到相邻的项目,如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]

模型可以定义默认的ordering,我可以检查查询集是否为ordered,但我不认为这两种情况都有用。

1 个答案:

答案 0 :(得分:6)

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

来自django docs:

  

query属性是一个不透明的对象。它表示查询构造的内部,不是公共API的一部分。但是,如此处所述,对属性的内容进行pickle和unpickle是安全的(并且完全支持)。