我有以下示例模型之一
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才能实现此目的?
答案 0 :(得分:0)
不,在过滤器中无法使用方法,因为ORM无法将其转换为SQL。在您的情况下,如果您想要的是按名称订购,然后按提供商名称订购,则通过unicode方法排序(即使可能)也可能会给您错误的结果,因为名称长度不一样。
使用原始SQL做Django可以做的事情也不是一个好主意,所以我认为最好的方法是:
titles = Title.objects.order_by('name', 'provider_name')