我得到这个异常:Django的ORM:在子类领域的覆盖related_name
django.core.exceptions.FieldError:
Local field 'ticket' in class 'SpecialPlugin' clashes with field of similar name from base class 'BasePlugin'
这里是我的模型:
class BasePlugin(models.Model):
ticket = models.OneToOneField('foobar.ticket', primary_key=True,
related_name='%(app_label)s_%(class)s')
class Meta(IndexImplementation.Meta):
abstract = True
# .. Other stuff which should be available for SpecialPlugin
# and other child classes.
class SpecialPlugin(BasePlugin):
ticket = models.OneToOneField('foobar.ticket', primary_key=True,
related_name='special')
我只found this note,但在我的情况下,父亲是一个抽象类。我不确定它是否适用于此。
因为BasePlugin的相关名称(%(app_label)s_%(class)s
)会破坏旧代码,所以我想给子类SpecialPlugin
添加相关名称“special”。
有没有办法给SpecialPlugin.ticket related_name“special”?
此错误应该只会出现,如果父类是**不是**抽象。我刚刚用简单的模型进行了测试,类似于你的模型,并且工作正常。如果您查看引发异常的Django代码,它会检查父类是否为抽象类。这暗示了'BasePlugin'不正确地被设置为抽象。 “IndexImplementation.Meta”中有什么? – solarissmoke
@solarissmoke IndexImplementation.Meta是abstract = True。这就是为什么我不明白错误信息。 – guettli