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 に答える