我正在尝试构建一个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)
每个提供资源的应用都应该通过一些身份识别来识别。此注册应在Provider
模型中进行,然后由ServiceResource
用作provider
字段。
我可能会在Provider(id='some-provider').save()
文件的顶部调用models.py
,但我不觉得这是最好的方法,导致每次更新表格{已加载{1}}。
另一种方法是手动向迁移文件添加一行,但我觉得这是错误的,有点hacky。可能有一种django的做法,我还没有发现。我希望可能有一个正确的'预先填充表格的方式。
我能想到的三种方式是:
models.py
实例掩盖provider
,而不是创建引用Provider
<的ForeignKey / LI>
醇>
Provider(id='service-provider')
初始化对象时设置它。虽然不推荐,但我可以覆盖class ServiceResource(ResourceProvider):
provider = Provider(id='service-provider')
方法并在那里设置值/将其添加到__init__
,然后再传递给父构造函数。
创建一个创建对象的静态方法 - 这感觉就像保证一点点,人们可以打破预期的格式。 django管理员会使用这个吗?
我希望我想要实现的目标是有道理的。如果我可以提供更多细节或示例,或者有任何不清楚的地方,请发表评论,我将回复或更新问题。