[英]How do I iterate through a list of related objects in a django template?
我是Django的新手,正在嘗試在視圖中打印相關模型。 我很確定數據庫本身已正確設置,包括鍵之類,並且表中有數據可供使用。 我不確定的是
我可以自己獲取選民信息,但是我嘗試使用相關的Phone
模型無法進行任何操作。
表格:
voters:
id int primary key
first_name varchar
phones:
id int primary_key
phone_number varchar
voter_phones:
voter_id FK
phone_id FK
楷模:
from django.db import models
class Phone(models.Model):
phone_number = models.CharField(max_length=255)
class Meta:
db_table = 'phones'
class Voter(models.Model):
first_name = models.CharField(max_length=255)
phones = models.ManyToManyField('Phone', through='VoterPhone', related_name='voters', through_fields=('voter_id', 'phone_id'))
class Meta:
db_table = 'voters'
class VoterPhone(models.Model):
voter = models.ForeignKey('Voter', related_name='voter_phones')
phone = models.ForeignKey('Phone', related_name='voter_phones')
class Meta:
db_table = 'voter_phones'
風景:
def results(request):
voters = Voter.objects.all()
return render(request, 'site/results.html', {'voters': voters})
模板:
{% for voter in voters %}
{{ voter.first_name }}
{% for phone in voter.phones_set.all %}
{{ phone.phone_number }}
{% endfor %}
{% endfor %}
最終結果是一個投票人姓名列表,沒有電話號碼。 我想念什么?
編輯:我創建了一個本地數據庫,生成並運行了django遷移,並插入了一些虛擬數據。 我仍然沒有電話號碼。
如果不使用Django創建數據庫,則需要為VoterPhone類指定表名。 Django不會選擇表決器表作為中間表。 我認為通過為VoterPhone類設置類別Meta:db_table ='voterphones' ,您應該能夠看到相關的電話號碼。
我終於有了工作。 我必須進行以下更改:
將表格重命名為其默認的django名稱(即,voters_phones而不是voter_phones)
發現選民電話中的外鍵是int(11)而選民和電話中的主鍵都是bigint(20)
刪除了連接模型
伙計們,謝謝您的幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.