распечатка списка людей с более чем одним домом, каждый дом с более чем одним номером телефона - PullRequest
1 голос
/ 23 декабря 2008

У меня есть класс Person, который может иметь несколько домов, в каждом из которых есть один или несколько телефонных номеров.

Я определил классы, но сейчас я пытаюсь создать представление, которое перечисляет каждого человека со всеми его домами и телефонными номерами для каждого домашнего адреса ... что-то вроде:

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

peter guy
453 north ave...

пока у меня есть что-то вроде этого:

(на мои views.py)

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

(и по моему шаблону)

{% 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 %}

Есть идеи, как написать для меня не хватает? конечно, если есть другой способ (более элегантный или эффективный) делать то, что мне нужно, я бы с удовольствием это услышал.

1 Ответ

7 голосов
/ 23 декабря 2008

У вас есть три вложенные коллекции: Person, Home, Phone Number.

Шаг 1 - Как бы вы написали это в функции просмотра?

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

Не пропустите этот шаг. Если вы не можете заставить его работать в функции представления, ваша модель неверна. Потратьте время, чтобы получить эту часть правильно.

Шаг 2. Преобразуйте это в синтаксис шаблона.

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

Результаты должны совпадать с вашей функцией просмотра.

...