Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何遍历django模板中的相关对象列表?_Python_Django_Many To Many - Fatal编程技术网

Python 如何遍历django模板中的相关对象列表?

Python 如何遍历django模板中的相关对象列表?,python,django,many-to-many,Python,Django,Many To Many,我是Django的新手,我正在尝试在视图中打印相关模型。我非常确定数据库本身设置正确,包括键等,表中有数据可供使用。我不确定的是 我是否将模型连接到正确的表名和列名 我正在为每个选民装电话吗 如何迭代关系本身 我可以自己获取选民信息,但我尝试使用相关的手机模型时,没有任何效果 表: voters: id int primary key first_name varchar phones: id int primary_key phone_number varchar vo

我是Django的新手,我正在尝试在视图中打印相关模型。我非常确定数据库本身设置正确,包括键等,表中有数据可供使用。我不确定的是

  • 我是否将模型连接到正确的表名和列名
  • 我正在为每个选民装电话吗
  • 如何迭代关系本身
我可以自己获取选民信息,但我尝试使用相关的
手机
模型时,没有任何效果

表:

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不会选择voterphones表作为中间表。我想通过设置 类元: db_表='voterphones'
对于VoterPhone课程,您应该能够看到相关的电话号码。

我终于找到了一些有用的东西。我必须做出以下改变:

  • 已将表重命名为其默认的django名称(即选民电话而不是选民电话)

  • 发现投票者手机中的外键是int(11),而投票者手机和手机中的主键都是bigint(20)

  • 删除了连接模型


谢谢你们的帮助。

我会在模板中使用什么语法在这些手机上进行迭代?你的模板看起来很好,不需要更改。我没有意外地复制和粘贴元块,但它就在那里。我从模板本身得到一个错误,说“ManyToManyField”对象在模板中voter.phones.all中for phone的行中没有属性“\u m2m\u reverse\u name\u cache”。@whiterook6我似乎想起了一个导致相同或非常类似错误的错误,但后来它被修复了。您使用的是哪个Django版本?@MNour
VoterPhone
与其他任何型号的手机一样,它根据应用程序名和型号名生成一个表名。明确定义表名肯定不会解决任何问题,除非您需要连接到使用非默认表名的旧数据库。