Распечатка списка людей с более чем одним домом, в каждом доме более одного номера телефона

У меня есть класс 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 %}

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
269
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас есть три вложенных коллекции: 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 %} 

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

Другие вопросы по теме