列名を使用せずに、列番号で結果を並べ替えたい。生の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