Python 修复使用django多表继承时的父字段值

Python 修复使用django多表继承时的父字段值,python,django,python-3.x,inheritance,django-models,Python,Django,Python 3.x,Inheritance,Django Models,我正在尝试构建一个django界面,以帮助管理和调配公司基础架构中的资源。我试图将多态性与“资源提供者”的概念结合起来使用 脚本 以下是一些能够很好地代表场景的存根模型: 资源模型(由一个应用程序提供): 资源提供者的抽象(由第二个应用程序提供): 单个资源提供商(由多个应用程序提供-每个提供商一个) 问题 单个应用程序如何注册为提供商? 每个提供资源的应用程序都应该通过一些id进行识别。此注册应该在提供商模型中进行,然后由服务资源作为提供商字段使用 我可能可以调用models.py文件顶部的P

我正在尝试构建一个django界面,以帮助管理和调配公司基础架构中的资源。我试图将多态性与“资源提供者”的概念结合起来使用

脚本 以下是一些能够很好地代表场景的存根模型:

资源模型(由一个应用程序提供): 资源提供者的抽象(由第二个应用程序提供): 单个资源提供商(由多个应用程序提供-每个提供商一个) 问题 单个应用程序如何注册为提供商? 每个提供资源的应用程序都应该通过一些id进行识别。此注册应该在
提供商
模型中进行,然后由
服务资源
作为
提供商
字段使用

我可能可以调用
models.py
文件顶部的
Provider(id='some-Provider').save()
,但我觉得这不是最好的方法,因为每次加载
models.py
时都会更新表

另一种方法是手动在迁移文件中添加一行,但我觉得这是错误的,而且有点老套。也许有一种django的方法我还没有发现。我认为可能有一种“正确”的预填充表的方法

如何使ServiceResource始终使用应用程序各自的提供者值? 我能想到的三种方法是:

  • 将其声明为对象的一部分(不要认为这会起作用,因为这将使用
    provider
    实例屏蔽
    provider
    ,而不是创建引用
    provider(id='service-provider')的ForeignKey
  • 类服务资源(ResourceProvider):
    提供者=提供者(id='service-provider')
    

  • 在初始化对象时设置它。虽然不建议这样做,但我可以重写
    \uuuu init\uuuu
    方法并在那里设置值/将其添加到
    **kwargs
    中,然后再传递给父构造函数

  • 创建一个创建对象的静态方法-这感觉好像不太可靠,人们可能会破坏预期的格式。django管理员会使用这个吗

  • 结束 我希望我所要达到的目标是有意义的。如果我能提供更多的细节或例子,或者有什么不清楚的地方,请发表评论,我会回答或更新问题

    class Resource(models.Model):
        """
        Representation of the physical resource
        """
        pass
    
    class Provider(models.Model):
        """
        Representation of a service provider that can provide resources
        """
        id = models.SlugField(max_length=32, primary_key=True)
    
    
    class ResourceProvider(models.Model):
        """
        'Abstract' class for a provider of the resource represented by Resource
        """
        provider = ForeignKey(Provider, null=False)
        provides = ForeignKey(ServerImage, null=False)
    
        class Meta:
            unique_together = ('provider', 'provides')
    
    class ServiceResource(ResourceProvider):
        """
        Representation of the resource on a particular
        """
        service_identifier = models.UUIDField(null=False)