我希望我的查询集的顺序是这样的,我有一个记录作为最后一个,然后上面的所有其他记录以不同的方式排序。
例如,名为agency的应用程序中的models.py ...
class Agency(models.Model):
name = models.CharField(max_length=64)
def __unicode__(self):
return self.name or "No Name"
我希望在查询集的底部有一个id为12的记录,以及所有其他按名称排序的记录,因此SQL会转换为类似的东西(注意,“id”== 12会对于代理商12是正确的而对所有其他人都是假的,所以第一个订购声明将使得所有非12个代理商自从在PostgreSQL中为False> True之后仍然如此):
SELECT
"agency_agency"."id",
"agency_agency"."name"
FROM
"agency_agency"
ORDER BY
"agency_agency"."id" = '12',
"agency_agency"."name"
那么,我如何使用Django Querysets实现这一目标?
agencies = Agency.objects.all().order_by(
'id=12',
'name'
) >>> Just throws Field errors
更新
我刚刚想出如何用.extra()
方法解决这个问题:
agencies = Agency.objects.all().extra(
order_by[
'"agency_agency"."id" = 12',
'name'
]
)
有人知道如何在不使用.extra()
方法的情况下解决这个问题吗?