繁体   English   中英

AttributeError:“恢复”对象没有属性“ prefetch_related”

[英]AttributeError: 'Resume' object has no attribute 'prefetch_related'

我试图了解使用prefetch_related和select_related进行优化。 我在博客的某个地方了解到,使用预取和选择的地方之一是,prefetch_related用于反向关系,而select_related用于正向关系。 就我而言,有简历模型和教育模型。 教育模型具有带有相关名称的FK简历,用于反向关系,而不是在查询时编写其他_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吗? 我不明白我遇到的问题

根据您提供的异常,您尝试在对象Resume而不是ResumeQuerySet上调用.prefetch_related()

因此,请确保您运行

Resume.objects.filter(applicant=request.user).prefetch_related('educations')

Resume.objects.get(applicant=request.user).prefetch_related('educations')

实际上,在这种情况下,您应该使用select_related。 据我所知,prefetch_related用于多对多关系,它使两个查询检索对象,而select_related用于正常fk或一对一关系,并且它使用联接在一个查询中获取所有对象。

Django ORM中的select_related和prefetch_related有什么区别? 检查该帖子,以了解有关select和prefetch的信息。

首先,请阅读此[prefetch_related相关文档] [1]

[1]: https//docs.djangoproject.com/zh-CN/1.11/ref/models/querysets/#prefetch-related,那么您将发现无法像这样使用它

你必须申请教育模式

education_instance = Education.objects.filter(resume__applicant == request.user).prefetch_related('resume')

希望这会帮助你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM