Skip to main content
 首页 » 编程设计

python之Django 模型父链接的自定义相关名称

2024年10月25日38zhujiabin

我正在处理一个需要可扩展的 Django 项目。因此,为此,我在核心应用程序和各种模板方法中创建了一系列基本模型(一些是抽象的,一些不是),以便可以毫不费力地为项目开发新的插件应用程序。

问题是,我有几个不同的插件应用程序,它们包含与核心应用程序具有相同名称和相同父类(super class)的模型。我觉得这些模型只适用于少数具有完全不同的独立实现的应用程序,在核心应用程序中有一个公共(public)类实际上没有意义。

核心应用:

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')