【问题标题】:Django Model inheritance error "field ... clashes with the field"Django 模型继承错误“字段...与字段冲突”
【发布时间】:2022-10-24 04:14:24
【问题描述】:

在 Django 中使用多表继承时遇到问题,但我没有找到解决问题的方法。

我有这两个模型:

class Person(models.Model):
    id = models.CharField(primary_key=True, max_length=12, default="")
    name = models.CharField(max_length=12, default="")
    birthday = models.DateField()

class Parent(Person):
    work = models.CharField(max_length=70, default="")
    spouce_field = models.OneToOneField(Person, on_delete=DO_NOTHING, related_name="spouce_field")

运行python3 manage.py makemigrations 时出现此错误:

ERRORS:

family.Parent.spouce_field: (models.E006) The field 'spouce_field' clashes with the field 'spouce_field' from model 'person.person'.

知道我在做什么错吗?

【问题讨论】:

  • 您可能希望在 OneToOneField 上使用 symmetric=True。另外,当其他字段都没有时,为什么那个名为..._field? :)
  • 我认为对称只用于多对多,不是吗?将它放在 OneToOneField 上时,我收到一条错误消息 an unexpected keyword argument。 ..._field 只是我尝试更改字段的实际名称,我认为它可能会解决问题,但显然没有:)
  • 啊,我对symmetric 不好。无论哪种方式,你都需要spouse = models.OneToOneField("Person", related_name="reverse_spouse") 或类似的,但它仍然很容易在数据模型方面变得非常奇怪,因为你可以想象有一个配偶链:)

标签: python django django-models one-to-one


【解决方案1】:

我相信mrcai 已经回答了你的问题here

在您的抽象类 Person 上作为抽象类来避免字段冲突。

您可以指定 Profile 是一个抽象类。这将停止检查 免于与您的父字段混淆。

class Meta:
   abstract = True

【讨论】:

    猜你喜欢
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多