Django 模型父级的自定义相关名称 link?

Custom related name for a Django model parent link?

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

问题是,我有几个不同的插件应用程序,它们包含来自核心应用程序的同名模型和相同的 superclass。我觉得这些模型只适用于少数具有完全不同的独立实现的应用程序,在核心应用程序中有一个通用的 class 真的没有意义。

核心应用:

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

这不起作用,因为在为父 link 创建的相关名称中存在冲突,据我所知,这只是 ModelBase 元 class 创建的 OneToOneField。我觉得只要在相关名称中包含应用程序的名称就可以避免这种情况,但我不知道是否有实用的方法可以做到这一点。

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

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

您可以在子类中明确指定父类 link:

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