我想按列号对结果进行排序,而不是使用列名。回退到原始 sql:
mytable.objects.raw('select * from hub_endu order by 1 desc')
我可以在 django ORM 上实现这一点吗?
喜欢
mytable.objects.order_by("-1")
您可以覆盖模型的查询集,并将索引转换为字段名称
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)
不推荐由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