2008-12-23 3 views
1

J'ai une personne de classe qui peut avoir plusieurs maisons, chacune avec un ou plusieurs numéros de téléphone.imprimer une liste de personnes avec plus d'une maison, chaque maison avec plus d'un numéro de téléphone

J'ai défini les classes, mais maintenant je suis en train de créer une vue Wich liste chaque personne, avec toutes ses maisons et tous les numéros de téléphone pour chaque adresse de la maison ... quelque chose comme:

john smith 
123 fake str 
    305-99-8877 
    305-99-8876 
321 oak road 
    444-98-7654 

peter guy 
453 north ave... 

jusqu'à présent, j'ai quelque chose comme ceci:

(sur mon views.py)

def ViewAll(request): 
    people = Person.objects.all() 
    render_to_response('viewall.html', {'people': people}) 

(et sur mon modèle)

{% for guy in people %} 
    {{ guy.name }} 
    {% if person.home_address_set.all %} 
    {{ home_address }} 

    {% for ?????? in ???? %} 
     #print phone numbers in each home 
    {% endfor %} 

    {% endif %} 
{% endfor %} 

une idée de la façon d'écrire le pour que je manque? Bien sûr, s'il y a un autre moyen (un moyen plus élégant et efficace) de faire ce dont j'ai besoin, j'aimerais l'entendre.

Répondre

6

Vous avez ce qui semble être trois collections imbriquées: Personne, Maison, Numéro de téléphone.

Étape 1 - Comment écrire cela dans une fonction de vue?

for p in Person.objects.all(): 
    print "person", p 
    for h in p.home_address_set.all(): 
     print " home", h 
     for ph in h.phone_set.all(): 
      print " phone", ph 

Ne pas omettre cette étape. Si vous ne pouvez pas le faire fonctionner dans une fonction de vue, votre modèle est erroné. Prenez le temps de bien faire cette partie.

Étape 2 - Convertissez ceci en syntaxe de modèle.

{% for p on people %} 
    {% for h in p.home_address_set.all %} 
     {% fpr ph in h.phone_set.all %} 
     {% endfor %} 
    {% endfor %} 
{% endfor %} 

Les résultats doivent être les mêmes que pour la fonction de vue.