【问题标题】:Django eager loading in many to manyDjango渴望加载多对多
【发布时间】:2016-01-10 20:23:45
【问题描述】:

这些模型很多

class FacultyMember(models.Model):
    # some attributes

class Publication(models.Model):
    # some attributes
    author = models.ManyToManyField(FacultyMember, blank=True)

class Project(models.Model):
    # some attributes
    researchers = models.ManyToManyField(FacultyMember, blank=True) 

我希望通过快速加载获得所有相关项目和出版物的 FacultyMember。

我尝试了一些类似下面的代码

FacultyMember.objects.filter(
    pk=id,
    first_name=first_name,
    last_name=last_name
).select_related('project_set').select_related('publication_set')

但它不起作用。

如何在 django orm 中加入相关字段并进行预加载。

【问题讨论】:

    标签: django orm inner-join django-orm eager-loading


    【解决方案1】:

    Manytomany 使用 prefetch_related;

    FacultyMember.objects.filter(
    pk=id,
    first_name=first_name,
    last_name=last_name
    ).prefetch_related('project_set').prefetch_related('publication_set')
    

    参考这里https://docs.djangoproject.com/en/1.8/ref/models/querysets/#prefetch-related

    【讨论】:

      猜你喜欢
      • 2014-11-29
      • 2014-12-15
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 2013-02-17
      相关资源
      最近更新 更多