Issue with Prefetch in Django

django, django-queryset, prefetch, python

Solution

I know it's an old question, but I encountered such error recently as well.

The problem is that `valeurs` are not assigned to `Referentiel` object, but to the `reference_set`.

So in this case, given that you have a queryset like this:

queryset = (
    Referentiel
    .objects
    .filter(code='whatever_code')
    .prefetch_related(Prefetch('reference_set__valeur_set', to_attr='valeurs'))
)

Instead of doing:

queryset[0].valeurs

You have to do:

queryset[0].reference_set.all()[0].valeurs

Unfortunately the `to_attr` may be misleading and scenario with nested lookup is not mentioned in the documentation.

Problem

I have the current model in my Django app: ``` 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) ``` And I wish to retrieve values of a Referentiel, so I do something like that: ``` Referentiel.objects.filter(code='whatever_code').prefetch_related(Prefetch('reference_set__valeur_set', to_attr='valeurs')) ``` But I have the following error when trying to get my values: ``` AttributeError: 'Referentiel' object has no attribute 'valeurs' ``` Django version: 1.7.4 Python version: 3.4.2 Thanks for any advice.

Original source