Python 在django models查询集中按自定义属性排序的好方法是什么?
我的模型中有一个自定义属性,我想使用该属性订购_:Python 在django models查询集中按自定义属性排序的好方法是什么?,python,django,sorting,sql-order-by,django-queryset,Python,Django,Sorting,Sql Order By,Django Queryset,我的模型中有一个自定义属性,我想使用该属性订购_: class Report(models.Model): title = models.CharField(max_length = 255) pub_date = models.DateTimeField('date published', blank=True, null=True) status = models.CharField(max_length = 2, choices=REPORT_STATUS)
class Report(models.Model):
title = models.CharField(max_length = 255)
pub_date = models.DateTimeField('date published', blank=True, null=True)
status = models.CharField(max_length = 2, choices=REPORT_STATUS)
@property
def risk_rating(self):
# Calculate risk rating here
return risk_rating
我想做什么
reports = Report.objects.all().order_by('-risk_rating')
当然,它返回一个关于不存在列的mysql错误。我不希望在使用python的排序算法中递归调用这个属性,但这是我认为能够让它工作的唯一方法
reports = sorted(Report.objects.all(), key=lambda t: t.risk_rating)
我能做得更好吗?不,ORM使用数据库进行排序,不能对python值进行操作 你可以
extra
您可以使用
操作符避免lambda
。itemgetter
import operator
reports = sorted(Report.objects.all(), key=itemgetter(risk_rating))
但我不确定这是否“更好”,也许您可以解释一下您希望查询如何改进?为什么不能将计算向下推到数据库?或者计算值并保存在数据库中?我想我可以采用第二种方法,在每次发布或更新报告时,将风险评级值缓存在一个新列中。多谢。