如何在django中查询一对多

时间:2017-10-15 01:46:36

标签: python mysql django django-models django-templates

我想做什么?

我的应用有三个模型:SeriesSectionEpisode,每个模型都有一个多个查询(通过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有相同的功能吗?

1 个答案:

答案 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()后不会产生额外查询。