Django:Order Queryset所以单个记录是最后一个

时间:2014-06-25 16:46:49

标签: sql django postgresql django-queryset

我希望我的查询集的顺序是这样的,我有一个记录作为最后一个,然后上面的所有其他记录以不同的方式排序。

例如,名为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()方法的情况下解决这个问题吗?

0 个答案:

没有答案