【发布时间】:2018-03-10 23:18:13
【问题描述】:
我试图了解 prefetch_related 和 select_related 用于优化的用途。我在博客的某处了解到,使用 prefetch 和 select 的地方之一是 prefetch_related 用于反向关系,而 select_related 用于正向关系。就我而言,有简历模型和教育模型。教育模型具有resume 的FK 和related_name 用于反向关系,而不是在查询时编写额外的_set。我需要用请求的用户简历列出请求用户的所有教育。我可以在没有以下优化技术的情况下做到这一点
education_instance = Resume.objects.get(applicant=request.user).educations.all()
当我尝试改用以下内容时,我得到了标题中所述的错误
education_instance = Resume.objects.filter(applicant=request.user).prefetch_related('educations')
这是我的模型
class Resume(models.Model):
applicant = models.OneToOneField(User, on_delete=models.CASCADE)
name = models.CharField(max_length=100, blank=False, null=False, help_text="Full Name")
class Education(models.Model):
resume = models.ForeignKey(Resume, related_name='educations')
name = models.CharField(max_length=100, blank=False, null=False, help_text="Name of an institution")
谁能用简单的外行术语让我清楚 select_related 和 prefetch_related 吗?我无法理解我遇到的问题
【问题讨论】:
标签: python django python-3.x django-models django-orm