我想做什么?
我有一个应用程序有三个模型:系列
,部分
和情节
,每个都有一个一对多查询(通过外键) .就这样
series-> many Section,section-> many Episode
现在我将在系列页面中显示一个包含剧集信息的部分,但它会产生更多查询。
现在代码
View .py
series = Series.objects.get(id=series_id)
section = Section.objects.filter(series=series)
列表.html
{% for item in sections %}
...
{% for episode in item.episode_set.all %}
...
{% endfor %}
...
{%endfor%}
模型.py
class Section(models.Model):
series = models.ForeignKey(Series)
....
class Episode(models.Model):
section = models.ForeignKey(Section)
我想得到什么?
示例代码告诉我如何在 views.py 中查询并仅使用少量查询。
你可以猜到,在我的代码中,如果这里有很多节和很多集,就会有很多查询。
一些想法。
我之前使用 Laravel,在 Laravel 中,它有一个 hasMany功能,我可以用它来获取其他模型项目(由 belongsTo 定义)。 Django 有同样的功能吗?
最佳答案
如果在模板中你只需要剧集,你可以用单个查询只查询它们
Episode.objects.filter(section__series=series_id)
但是如果您需要所有数据,那么您可以使用prefetch_related
Django docs .
最简单的示例看起来足以满足您的代码
series = Series.objects.filter(id=series_id).prefetch_related('section_set', 'section_set__episode_set').get()
在此调用 series.section_set.all()
和 section.episode_set.all()
之后将不会产生额外的查询。
关于python - 如何在django中查询一对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46750948/