0

モデルのディクショナリを作成しており、そのディクショナリを使用して json データを作成しています。

class MyImage(models.Model):
  ...
  album = models.ForeignKey(Album)
  def to_dict(self):
     result = {}
     result['id'] = self.id
     .. additional data...
     result['album_id'] = self.album.id  // database hit
     result['album_title'] = self.album.title  // another database hit
     result['album_something'] = self.album.something // another hit

上記のコメントで述べたように、MyImage の辞書を作成するには 1+3 が必要であることがわかりました。

どうにかして DB ヒットを 1+3 ではなく 1+1 に減らすことはできますか?

4

2 に答える 2

0

値オブジェクト (すべてのデータベース エンティティ属性を持つ単純なクラス) にデータをキャプチャする 1 ヒットで管理できます - 1 ヒット

値オブジェクトからjsonデータを提供/構築します。

于 2013-01-08T03:46:35.740 に答える
0

select_related を使用します。

ドキュメントから

外部キー関係を自動的に「たどる」QuerySet を返し、クエリの実行時に追加の関連オブジェクト データを選択します。これはパフォーマンス ブースターであり、(場合によってははるかに) クエリが大きくなりますが、後で外部キー リレーションシップを使用する際にデータベース クエリが不要になることを意味します。

# Hits the database.
e = Entry.objects.get(id=5)

# Hits the database again to get the related Blog object.
b = e.blog

# Hits the database.
e = Entry.objects.select_related().get(id=5)

# Doesn't hit the database, because e.blog has been prepopulated
# in the previous query.
b = e.blog
于 2013-01-08T06:31:50.617 に答える