不能通过valu在Django ManyToManyField中使用字符串

2024-06-28 11:02:14 发布

您现在位置:Python中文网/ 问答频道 /正文

(如果我遗漏了一些有助于诊断的关键信息,我很抱歉——我是Python和Django的新手。)

当我试图通过属性在ManyToManyField中使用字符串时,Django会抱怨:

File "/vagrant/flamingo_env/lib/python3.4/site-packages/django/db/models/fields/related.py", line 1366, in _check_relationship_model
  for f in through._meta.fields:
AttributeError: 'str' object has no attribute '_meta'

用法:

^{pr2}$

如果我创建一个穿透模型,错误就会消失:

class VoterAddress(models.Model):
  voter_id = models.ForeignKey(Voter)
  address_id = models.ForeignKey(Address)

  class Meta:
    db_table = 'voter_addresses'

但当然,它会抱怨选民没有被定义——我不能简单地改变顺序,否则VoterAddress也不会被定义。在

在每一个例子中,我都看到了使用的基本字符串版本。发生什么事?在


Tags: django字符串inidfieldsdb定义models
2条回答

要解决排序问题,可以给ForeignKey类指定一个字符串值。在

class VoterAddress(models.Model):
    voter_id = models.ForeignKey("Voter")
    address_id = models.ForeignKey("Address")

    class Meta:
        db_table = 'voter_addresses'

这是一种为尚未在文件中定义的模型定义外键的方法。 如果您更改此Django不会抱怨Voter hasn't been defined。在

您需要修复传递给您的through的名称

addresses = models.ManyToManyField(Address, through='VoterAddress')

它必须是自定义^{的确切名称

如果不传递through参数,则不需要创建throughmodel。Django将为您创建和管理一个

相关问题 更多 >