Order_by queryset,其值为django

时间:2015-07-02 07:53:15

标签: django unicode sql-order-by django-queryset

我有以下示例模型之一

class Title(models.Model):
    name = models.CharField(max_length=200)
    provider_name = models.CharField(max_length=255, blank=True)
    keywords = models.CharField(max_length=200, null=True, blank=True)

    def __unicode__(self):
        return '{0} - {1} (name/provider)'.format(name, provider_name)

所以为了order_by标题模型查询集与任何模型字段,我们可以做到

titles = Title.objects.all().order_by('name')

但是有可能通过具有特定值的queryset来order_吗?我的意思是我想通过Title模型查询集以unicode方法的返回值命令,即name and provider_name('{0} - {1}(名称/提供者)'。格式的组合( name,provider_name))

所以整体而不是使用模型字段/数据库列执行order_by,我想按值排序(在这种情况下返回unicode方法的值)

是否可以使用ORM中的值查询set_或者我们需要编写原始sql才能实现此目的?

1 个答案:

答案 0 :(得分:0)

不,在过滤器中无法使用方法,因为ORM无法将其转换为SQL。在您的情况下,如果您想要的是按名称订购,然后按提供商名称订购,则通过unicode方法排序(即使可能)也可能会给您错误的结果,因为名称长度不一样。
使用原始SQL做Django可以做的事情也不是一个好主意,所以我认为最好的方法是:

titles = Title.objects.order_by('name', 'provider_name')