簡體   English   中英

如何遍歷Django模板中的相關對象列表?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM