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

Posted

技术标签:

【中文标题】Django模型父链接的自定义相关名称?【英文标题】:Custom related name for a Django model parent link? 【发布时间】:2015-06-01 06:46:56 【问题描述】:

我正在开发一个需要可扩展的 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】:

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

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

【讨论】:

以上是关于Django模型父链接的自定义相关名称?的主要内容,如果未能解决你的问题,请参考以下文章

Django admin 中的自定义相关下拉菜单

相关模型 eloquent laravel 中的自定义查询

具有父 url 参数的自定义 Django 管理站点

django模型中的自定义保存方法

django:自相关 ForeignKey 字段的相关名称不起作用 |在模板中获取相反方向的自引用

如何使用 django_graphene 解析 django 模型的自定义字段?