Я новичок в Django, и я пытаюсь получить связанные модели печати в представлении. Я уверен, что сам DB настроен правильно, включая ключи и т. Д., И в таблице есть данные. Что я не уверен в этом?Как перечислить список связанных объектов в шаблоне 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 %}
Конечным результатом является список имен избирателей и номера телефонов. Что мне не хватает?
EDIT: Я создал локальную базу данных, сгенерировал и запускал миграции django и вставил некоторые фиктивные данные. У меня по-прежнему нет телефонных номеров.
Какой синтаксис я использовал бы в шаблоне для итерации по этим телефонам? – whiterook6
Ваш шаблон выглядит отлично, не нужно его менять. –
Я не копировал и не вставлял мета-блок случайно, но он есть. Я получаю ошибку от самого шаблона, говоря, что объект «ManyToManyField» не имеет атрибута «_m2m_reverse_name_cache» в строке в шаблоне, для телефона в элементе voter.phones.all. – whiterook6