我的应用有三个模型:Series
,Section
和Episode
,每个模型都有一个多个查询(通过ForeignKey)。就像这样
串联>许多部分,部分 - >许多剧集
现在我将在系列页面中显示一个包含剧集信息的部分,但它会进行更多查询。
views.py
series = Series.objects.get(id=series_id)
section = Section.objects.filter(series=series)
list.html
{% for item in sections %}
...
{% for episode in item.episode_set.all %}
...
{% endfor %}
...
{%endfor%}
models.py
class Section(models.Model):
series = models.ForeignKey(Series)
....
class Episode(models.Model):
section = models.ForeignKey(Section)
示例代码告诉我如何在views.py中查询并使用少量查询。
你可以猜测,在我的代码中,如果这里有很多部分和很多插曲,它会有很多查询。
我使用Laravel之前,在Laravel中,它有一个hasMany函数,我可以使用它来获取其他模型项(由belongsTo定义)。 Django有相同的功能吗?
答案 0 :(得分:0)
如果在模板中您只需要剧集,则可以使用单个查询
查询它们(?, 16, 16, 4, 192)
(?, 4, 16, 16, 192)
(?, 7, 32, 32, 192)
(?, 32, 32, 7, 192)
但如果您需要所有数据,则可以使用Episode.objects.filter(section__series=series_id)
Django docs。
最简单的示例看起来足够代码
prefetch_related
此调用series = Series.objects.filter(id=series_id).prefetch_related('section_set', 'section_set__episode_set').get()
和series.section_set.all()
后不会产生额外查询。