我的 Django 应用程序中有当前模型:
class Referentiel(models.Model):
code = models.CharField(max_length=50)
libelle = models.CharField(max_length=100)
class Reference(models.Model):
referentiel = models.ForeignKey('Referentiel', related_name='reference_set')
clef = models.CharField(max_length=50)
class ValeurReference(models.Model):
reference = models.ForeignKey('Reference', related_name='valeur_set')
valeur = models.DecimalField(max_digits=15, decimal_places=5)
date_fin = models.DateField(blank=True, null=True)
我想检索 Referentiel 的值,所以我做了类似的事情:
Referentiel.objects.filter(code='whatever_code').prefetch_related(Prefetch('reference_set__valeur_set', to_attr='valeurs'))
但是在尝试获取我的值时出现以下错误:
AttributeError: 'Referentiel' object has no attribute 'valeurs'
Django 版本:1.7.4 Python版本:3.4.2
感谢您的任何建议。
最佳答案
我知道这是一个老问题,但我最近也遇到了这样的错误。
问题是 valeurs
没有分配给 Referentiel
对象,而是分配给了 reference_set
。
所以在这种情况下,假设您有这样的查询集:
queryset = (
Referentiel
.objects
.filter(code='whatever_code')
.prefetch_related(Prefetch('reference_set__valeur_set', to_attr='valeurs'))
)
而不是做:
queryset[0].valeurs
你必须做的:
queryset[0].reference_set.all()[0].valeurs
不幸的是,to_attr
可能具有误导性,并且文档中未提及嵌套查找的场景。
关于python - Django 中的预取问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28699464/