【问题标题】:How can I have two foreign keys to the same model in Django?如何在 Django 中对同一个模型有两个外键?
【发布时间】:2010-10-07 07:13:51
【问题描述】:

我想对同一个模型有两个外键:

class Test(models.model):
    example1 = models.ForeignKey(Example)
    example2 = models.ForeignKey(Example)

我收到如下错误:

字段“example1”的访问器与相关的冲突 字段'Example.test_set'。添加一个 related_name 参数 'example1'的定义。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    尝试使用related_name

    class Test(models.model):
        example1 = models.ForeignKey('Example', related_name='example1')
        example2 = models.ForeignKey('Example', related_name='example2')
    

    【讨论】:

    • 我在应用中有两个模型试图做到这一点。第二个适用于这种方法:它必须为第一个模型提供外键。第一个模型不起作用。也许是因为它指的是导入的模型。有没有人用进口模型做这个工作?
    • Example model 需要这些单引号吗?
    【解决方案2】:

    Django 使用一些 python 魔法来定义模型之间的关系,其中一些涉及使用关系中模型的名称(这就是 'test__set' 中的 'test' 的来源。)我猜发生了什么,是它试图将“test__set”两次放入示例模型中,一次用于您定义的每个外键。

    错误消息建议尝试:定义一个related_name 参数(覆盖其中一个'test_set'),它可以使用它而不是自动生成两个冲突的名称。

    更多信息here:页面已被删除

    与模型关系相关的当前页面: https://docs.djangoproject.com/en/2.0/ref/models/fields/#module-django.db.models.fields.related

    【解决方案3】:

    按照错误消息告诉您的操作去做,如果您不确定这意味着什么,请查阅related_name 的文档。

    【讨论】:

      【解决方案4】:

      在 django 2.0 中试试这个:

      user = models.ForeignKey(User, on_delete=models.PROTECT, null=True,  related_name='user')
      paper = models.ForeignKey(paperRecord, on_delete=models.PROTECT, null=True,  related_name='paper')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-01
        • 2017-10-13
        • 1970-01-01
        • 2019-07-30
        • 2015-03-28
        • 1970-01-01
        相关资源
        最近更新 更多