我正在为我的模型创建一个字典,并使用字典来制作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,如上面的评论中所述。
我能否以某种方式将数据库命中率降低到1 + 1而不是1 + 3?
答案 0 :(得分:0)
你可以用1次命中来管理 将数据捕获到值对象(具有所有数据库实体属性的简单类) - 1命中
并从Value Object中提供/构造您的json数据。
答案 1 :(得分: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