2017-05-23 3 views
0

J'ai 3 connectés les uns aux autres modèles. GroupRequirementType --> GroupRequirement --> Requirement. Je suis impatient de montrer toutes les exigences dans le modèle. Le code suivant ne montre que les objets GroupRequirementType. Il semble que j'ai des problèmes avec _set.all. Qu'est-ce qui ne va pas?Pourquoi _set.all ne fonctionne pas dans tempale?

models.py:

class GroupRequirementType(models.Model): 
    name = models.CharField(_('Name'), max_length=250) 

class GroupRequirement(models.Model): 
    group_requirement_type = models.ForeignKey(GroupRequirementType, on_delete=models.CASCADE) 
    name = models.CharField(_('Name'), max_length=250) 

class Requirement(models.Model): 
    group_requirement = models.ForeignKey(GroupRequirement, on_delete=models.CASCADE) 
    name = models.CharField(_('Name'), max_length=250) 

modèle :

{% for group_requirement_type in group_requirement_types %} 
    {{ group_requirement_type }} 

    {% for group_requirement in group_requirement_type.group_requirement_set.all %} <!--DONT WORK. WHY?--> 
     {{ group_requirement }} 

     {% for requirement in group_requirement.requirement_set.all %} 
     {{ requirement }} 
     {% endfor %} 

    {% endfor %} 

{% endfor %} 
+1

Je ne me souviens pas si Django convertit automatiquement CamelCase en minuscules en ajoutant un trait de soulignement. Est-ce que 'grouprequirement_set.all' fonctionne? –

+0

Merci! Tu avais raison. 'grouprequirement_set.all' fonctionne. Postez votre réponse encore une fois mais pas comme commentaire. Je vais le marquer comme bonne réponse. –

Répondre

0

On dirait que Django n'ajoute pas automatiquement un trait de soulignement lors de la conversion du nom du modèle de CamelCase minuscules. grouprequirement_set.all fonctionne.

0

Je vous recommande fortement d'utiliser Django ForeignKey related_name propriété dans votre déclaration de modèles, ce qui rend beaucoup plus facile envers les opérations de relations: https://docs.djangoproject.com/en/1.11/ref/models/fields/#django.db.models.ForeignKey.related_name

Dans votre cas, il va se transformer en quelque chose comme

models.py:

class GroupRequirementType(models.Model): 
    name = models.CharField(_('Name'), max_length=250) 

class GroupRequirement(models.Model): 
    group_requirement_type = models.ForeignKey(GroupRequirementType, related_name='group_requirements', on_delete=models.CASCADE) 
    name = models.CharField(_('Name'), max_length=250) 

class Requirement(models.Model): 
    group_requirement = models.ForeignKey(GroupRequirement, related_name='requirements', on_delete=models.CASCADE) 
    name = models.CharField(_('Name'), max_length=250) 

modèle :

{% for group_requirement_type in group_requirement_types %} 
    {{ group_requirement_type }} 

    {% for group_requirement in group_requirement_type.group_requirements.all %} <!--DONT WORK. WHY?--> 
     {{ group_requirement }} 

     {% for requirement in group_requirement.requirements.all %} 
      {{ requirement }} 
     {% endfor %} 

    {% endfor %} 

{% endfor %}