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+1 而不是 1+3 吗?

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 回答