【发布时间】:2017-03-13 14:22:02
【问题描述】:
我正在将一个项目从 django 1.8 升级到 1.10,看起来 django 改进了外键和模型继承之间最终名称冲突的检查。 这显然是一件好事,但我需要升级的项目很大,重命名一个模型将是一个地狱。
让我解释一下问题:我有一个名为Parent 的基类和许多链接在一起的子类,就像这样:
class Parent(models.Model):
title = models.CharField(max_length=10)
class ChildA(Parent):
description = models.TextField()
class ChildB(Parent):
description = models.TextField()
childa = models.ForeignKey(ChildA)
这里的冲突是childb 对象有 2 个“childa”属性:
- “childa”外键
- ChildA 模型继承的实例(因为 childb 也有
parent属性)。
这里有两个明显的解决方案:
- 将 ForeignKey
ChildB.childa重命名为ChildB.somethingelse - 将
ChildA模型重命名为其他名称。
这两种解决方案的成本都很高,并且可能会引入新的错误。 所以我想知道:是否可以重命名继承对象的反向相关名称?
例如:
p = Parent.objects.get(pk=1)
print p.childa_child # Hit the ChildA instance
我不知道我是否足够清楚,但我会及时更新这个问题。
==== 编辑 ====
为了更简洁,如果我有两个模型class Parent(models.Model) 和class Child(Parent),则会创建一个动态属性parent.child。
是否可以在不触及类名的情况下编辑此属性名?
【问题讨论】:
标签: python django inheritance