0

これは私の要点を説明するための簡単な例です

class A(models.Model):
  boolean_field=models.BooleanField(default=False)
  name = models.CharField(max_length=50, blank=True)
  some_other_field = models.CharField(max_length=10)

  def true_value(self):
    if self.boolean_field:
      return self.name
    else:
      return ''

  def false_value(self):
    if not self.boolean_field:
      return self.name
    else:
      return ''

admin.py

class Aadmin(admin.ModelAdmin):
  list_display = ('true_value', 'some_other_field', 'false_value')

上記の例では、データベースが 2 回ヒットしたと思います。一度に値を取得して list_display で使用する方法はありますか。この要件を最適化する方法はありますか。

ありがとう

4

1 に答える 1

0

Django のモデル レイヤーの仕組みについて、あなたがかなり大きな誤解を持っていることは明らかなので、私のコメントで述べた点については、さらに説明する価値があります。

Django がデータベースからオブジェクトをフェッチすると、そのオブジェクトのさまざまな属性への後続の呼び出しは、db への余分な呼び出しをトリガーしません。特に指定しない限り、モデルのすべての属性が同時に取得され、モデル インスタンスに格納されます。(追加の呼び出しが発生する唯一のケースは、属性が外部キーの場合ですが、その場合でも を使用して回避できますselect_related。)

実際、Django は 1 回の呼び出しでページ上のすべての行をフェッチするため、オブジェクトごとに 1 回の呼び出しが発生することはありません。

于 2013-03-29T14:37:16.343 に答える