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

时间:2015-03-27 19:56:35

标签: python django metaclass

我正在开发一个需要可扩展的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。我觉得这可以通过在相关名称中包含应用程序的名称来避免这种情况,但我不知道是否有一种实用的方法可以做到这一点。

由于这些插件应用程序将由不同的人创建,我觉得我应该处理类名冲突,特别是因为我不认为它们不太可能发生。

有没有办法为父链接字段指定相关名称?还有其他想法吗?

1 个答案:

答案 0 :(得分:1)

您可以在子类中显式指定父链接:

class MySubclass(MyBaseClass):
    mybaseclass = models.OneToOneField(MyBaseClass, parent_link=True, related_name='thissubclass')