Mic*_*ace 9 django django-models
我遇到了一个问题,我正在尝试创建一个QuerySet,其结果不是由模型上的字段排序,而是由模型上的方法返回的值的结果排序.
以机智:
class MyModel(models.Model):
someAttributes = models.TextField(blank=True)
@property
def calculate_rating(self):
<do some calculation and return integer>
Run Code Online (Sandbox Code Playgroud)
鉴于此,我如何构造一个QuerySet,按照calculate_rating()返回的每个实例的值对结果进行排序?
在尝试简单地使用order_by()时,我收到一个错误:
无法将关键字'average_rating'解析为字段.
任何人都可以提供一些想法吗?
Ale*_*dre 12
order_by是数据库的东西.尝试使用sorted:
sorted(MyModel.objects.all(), key=lambda m: m.calculate_rating)
Run Code Online (Sandbox Code Playgroud)
没有办法做到这一点。您可以做的一件事是为该模型创建一个单独的数据库字段,并将计算出的评级保存在其中。您可能可以覆盖模型的save方法并在那里进行计算,之后只能引用该值。
您还可以QuerySet使用排序返回的内容Python sorted。考虑到使用内置排序函数的排序方法会增加很多计算复杂性,因此在生产中使用此类代码并不是一个好主意。
有关更多信息,您可以检查以下答案:https : //stackoverflow.com/a/981802/1869597
| 归档时间: |
|
| 查看次数: |
5574 次 |
| 最近记录: |