私は、最適化のためにprefetch_relatedとselect_relatedの使用を理解しようとしています。私はブログのどこかで、プリフェッチとセレクトを使用する場所の1つがprefetch_relatedがリバースリレーションに使用され、select_relatedがフォワードリレーションに使用されていることを学びました。私の場合、レジュームモデルと教育モデルがあります。教育モデルでは、照会の際に_setを追加する代わりに、related_nameでリバース関係を再開するFKがあります。私は、要求されたユーザーのすべての教育を、要求されたユーザーの履歴書と共に一覧表示する必要があります。私は私が代わりに以下を使用しようとしたとき、私はここでタイトルにAttributeError: 'Resume'オブジェクトに属性 'prefetch_related'がありません
education_instance = Resume.objects.filter(applicant=request.user).prefetch_related('educations')
を述べたエラーが出る従う
education_instance = Resume.objects.get(applicant=request.user).educations.all()
として、これらの最適化技術なしでこれを行うことが、私のモデルは
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
のQuerySet
、オブジェクトResume
に.prefetch_related()
を呼び出そうとしている、私はあなたが提供する例外から
そのように私はすべての代わりに1つだけのクエリを取得します – milan
@milanあなたは1つの 'QuerySet'をどういう意味ですか? –