通过@property对Django查询集进行排序

Bre*_*den 13 python django

我正在尝试按照我在模型中定义的属性来设置查询集,但不确定执行此操作的最佳方法.这是属性:

@property
def name(self):
    if self.custom_name:
        return self.custom_name
    else:
        return self.module_object.name
Run Code Online (Sandbox Code Playgroud)

基本上,我想做一个:

things = Thing.objects.all().order_by('-name')
Run Code Online (Sandbox Code Playgroud)

但当然在渲染时遇到Caught FieldError:无法将关键字'name'解析为字段.

有任何想法吗?

编辑:我知道我不能这样排序,因为@property它不是一个数据库字段.我的问题是如何排序给定@property的不是数据库字段.

Gab*_*aru 21

你不能这样做,因为该属性不在MySQL中,而是在你的python代码中.如果你真的想这样做,你可以在客户端(虽然它会很慢):

sorted(Thing.objects.all(), key=lambda t: t.name)
Run Code Online (Sandbox Code Playgroud)