我正在一个需要可扩展的Django项目。因此,出于这个原因,我在核心应用程序和各种模板方法中创建了一系列基本模型(有些抽象,有些则没有),从而可以轻松开发该项目的新插件应用。
问题是,我有几个不同的插件应用程序,其中包含与核心应用程序具有相同名称和相同超类的模型。我觉得这是模型,仅适用于少数几个具有完全不同的独立实现的应用程序,并且在核心应用程序中只有一个通用类真的没有意义。
核心应用:
class MyBaseClass(models.Model):
"""
This is the base class.
"""
pass
插件应用1:
class MySubclass(MyBaseClass):
"""
Some subclass.
"""
pass
插件应用2:
class MySubclass(MyBaseClass):
"""
Some other subclass.
"""
pass
这是行不通的,因为为父链接创建的相关名称中存在冲突,据我所知,这只是由ModelBase元类创建的OneToOneField。我觉得可以通过在相关名称中包含应用程序的名称来避免这种情况,但是我不知道是否有实用的方法可以做到这一点。
由于这些插件应用程序是由不同的人创建的,因此我觉得我应该处理类名冲突,特别是因为我认为它们不太可能发生。
有没有办法为父链接字段指定相关名称?还有其他想法吗?
最佳答案
您可以在子类中显式指定父链接:
class MySubclass(MyBaseClass):
mybaseclass = models.OneToOneField(MyBaseClass, parent_link=True, related_name='thissubclass')
关于python - Django模型父链接的自定义相关名称?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29309178/