0

我想按列号对结果进行排序,而不是使用列名。回退到原始 sql:

mytable.objects.raw('select * from hub_endu order by 1 desc')

我可以在 django ORM 上实现这一点吗?

喜欢

mytable.objects.order_by("-1")
4

2 回答 2

2

您可以覆盖模型的查询集,并将索引转换为字段名称

class CustomQuerySet(models.query.QuerySet):

    def order_by(self, *args, **kwargs):
        my_args = []
        for arg in args:
            if type(arg) == int:
                my_args.append(self.model._meta.fields[arg].name)
            else:
                my_args.append(arg)

        print my_args
        return super(CustomQuerySet, self).order_by(*my_args, **kwargs)

class CustomManager(models.Manager):
    def get_query_set(self):
        return CustomQuerySet(self.model)
于 2012-09-05T21:04:41.400 回答
0

不推荐由http://blog.sqlauthority.com/2010/12/27/sql-server-order-by-columnname-vs-order-by-columnnumber/提供

USE AdventureWorks
GO
-- ColumnName (Recommended)
SELECT *
FROM HumanResources.Department
ORDER BY GroupName, Name
GO
-- ColumnNumber (Strongly Not Recommended)
SELECT *
FROM HumanResources.Department
ORDER BY 3,2
GO
于 2012-09-05T19:44:32.720 回答