我有一个Djangomulti-table model inheritance的典型用例,在一个管理远程主机的应用程序中。在
该应用程序可以与通用的“RemoteHost”或“SshHost”(也就是一个RemoteHost)或“EsxiHost”(也就是SshHost)一起工作,所以我很自然地选择了多表模型继承:
class RemoteHost(models.Model):
...
def shutdown(self):
raise NotImplemented()
class SshHost(RemoteHost):
...
def shutdown(self):
# run SSH shutdown command
class EsxiHost(SshHost):
...
def shutdown(self):
# shutdown running virtual machine using VMware API
SshHost(self).shutdown()
我希望能够在不知道特定主机类型的情况下“关闭”托管主机,例如RemoteHost.objects.get(pk=1).shutdown()
,但事实证明Django数据模型将返回显式请求的类型(根据我的经验,以及the docs)。在
我正在寻找一种干净的方法来获取基于基类queryset的最专门的实例。在
到目前为止,我提出的“最干净”方法如下:
^{pr2}$这种方法的优点是它可以工作:-)
但我不喜欢,原因如下:
get_specialized_instance()
的使用代码。在因此,任何关于更好/更清洁的方法来实现这一点的建议都是受欢迎的!在
Django Polymorphic可能是您的朋友,它不是编写您自己的对象管理器和设置内容类型,而是为您完成所有繁重的工作。给你,一个正确的答案!:-)
相关问题 更多 >
编程相关推荐