2010-01-13 6 views
0

J'ai un modèle avec "dispositions" et un modèle avec "vendeur". Je veux obtenir la remise moyenne de tous les vendeurs. Voici ce que je suis en train:Django annoter avec des valeurs: comment accéder aux valeurs?

sm = Disposal.objects.annotate(average_discount=Avg('discount')).values('average_discount','sm__fname','sm__lname').order_by('-discount') 
    for s in sm: 
     data[0] = data[0]+s.sm__fname+','+s.sm__lname+','+str(s.average_discount) 

Maintenant, j'obtiens cette erreur:

Disposal object has no attribute sm__fname

La requête fonctionne bien quand je l'exécute dans la coquille de django - mais comment puis-je accéder aux valeurs? Merci beaucoup!

Répondre

1

Tout d'abord, comme le dit the documentation, en utilisant values vous donne une liste de dictionnaires, pas d'objets du modèle. Donc, chaque s n'a pas d'attribut sm_whatever, il a une clé de dictionnaire. Donc, essayez ceci:

s['sm__lname'] 

Cependant, je dois dire que je ne vois pas la nécessité d'utiliser values ici du tout. Vous seriez mieux juste obtenir les objets réels:

sm = Disposal.objects.annotate(average_discount=Avg('discount')).order_by('-discount') 

puis accéder aux objets connexes pertinents normalement: s.fname.

Questions connexes