1

モデルにカスタムプロパティがあり、そのプロパティを使用してorder_byを実行したいと思います。

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)

私はおそらくそれよりもうまくやれるでしょうか?

4

2 に答える 2

1

いいえ、ORM はデータベースを使用して注文し、python 値を操作することはできません。

あなたはできる...

  1. django を介してデータベース レベルで計算するextra
  2. データを計算し、モデルの保存時に新しい列に設定してから、それで並べ替えます。
  3. Python の並べ替えを使用する
于 2013-03-04T19:40:05.590 に答える
1

lambdawith を避けることができますoperator.itemgetter

import operator
reports = sorted(Report.objects.all(), key=itemgetter(risk_rating))

しかし、それが「より良い」かどうかはわかりません。おそらく、クエリをどのように改善したいか説明できますか?

于 2013-03-04T19:40:09.960 に答える