Skip to main content
 首页 » 编程设计

python之打印一份拥有多个家庭的人员名单,每个家庭有多个电话号码

2025年05月04日13softidea

我有一个 Person 类,它可以有多个 Homes,每个 Homes 有一个或多个电话号码。

我已经定义了类,但现在我正在尝试创建一个 View ,其中列出每个人,以及每个人的所有家庭和每个家庭地址的所有电话号码......类似于:

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

知道如何编写 for I missing 吗?当然,如果有另一种方式(更好、更优雅或更有效的方式)来完成我需要的事情,我很乐意听到。

请您参考如下方法:

您有似乎是三个嵌套的集合:Person、Home、Phone Number。

第 1 步 - 您将如何在 View 函数中编写它?

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 

不要省略这一步。如果你不能让它在 View 函数中工作,那么你的模型是错误的。花点时间把这部分做好。

第 2 步 - 将其转换为模板语法。

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

结果应该与您的 View 函数相同。