python - 如何在django中查询一对多

标签 python mysql django django-models django-templates

我想做什么?

我有一个应用程序有三个模型:系列部分情节,每个都有一个一对多查询(通过外键) .就这样

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/

相关文章:

python - 如何在 matplotlib 中绘制矩阵的特定部分?

Python - 从 Internet 下载 .exe 文件

c# - Entity Framework 6 : Creating database with multiple contexts

python - 如何使用正则表达式替换一定数量的空格?

python - 如何用 Python 制作一个简单的跨平台网页浏览器?

java - 如何使用 JDBC 从远程计算机访问 WAMP 数据库?

javascript - 用json显示数据库记录

python - Django 和线程安全

jquery - 如何在 Django 应用程序中使用 bootstrap-datepicker?

python - 在 Django 用户模型中需要 first_name 和 last_name