2017-10-18 5 views
0

j'ai les modèles suivants django:requête Django ne sélectionne pas related_name

class UserPayments(models.Model): 

    _DATABASE = "payments" 

    id = models.AutoField(primary_key=True) 
    paym_psp_id = models.ForeignKey(ConfigPSP, null=True, on_delete=models.SET_NULL) 
    [...] 

class InvoiceNumbers(models.Model): 
    _DATABASE = "payments" 

    id = models.AutoField(primary_key=True) 
    inv_date = models.DateField(null=False) 
    inv_payment_id = models.ForeignKey(UserPayments, null=True, on_delete=models.DO_NOTHING, related_name='paym_invoice_meta') 
    [...] 

Comme vous pouvez le voir, ils sont liés à la définition de « related_name » dans le modèle InvoiceNumbers.

Quand je fais pas une requête dans django comme:

payments = UserPayments.objects.filter(paym_user_id=user_id) 

Et itérer cette requête dans un modèle

{% for inv in payments %} 
     {% for meta in inv.paym_invoice_meta %} 
      {{ meta.inv_invoice_hash }} 
     {% endfor %} 
{% endfor %} 

Je reçois l'erreur de modèle qui pay_invoice_meta n'est pas itérable. Avec une instruction de sélection manuelle incluant la jointure externe gauche, j'obtiens tous les résultats.

Qu'est-ce qui me manque ici? Comment puis-je forcer la requête à sélectionner les valeurs de InvoiceNumbers?

+0

{% remplacer pour la méta dans inv.paym_invoice_meta.all%} –

Répondre

0

Appelez la méthode all de l'objet correspondant pour retourner un QuerySet:

{% for inv in payments %} 
    {% for meta in inv.paym_invoice_meta.all %} 
     {{ meta.inv_invoice_hash }} 
    {% endfor %} 
{% endfor %} 
+0

Voilà. Merci beaucoup! Perdu beaucoup de temps pour la recherche - aurait dû demander ealier ... – FreddyFFM