リモートホストを管理するアプリで、Djangoマルチテーブル モデルの継承の古典的な使用例があります。
このアプリは、一般的な "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データモデルは明示的に要求されたタイプを返すことがわかりました(私の経験とドキュメントによると)。
基本クラスのクエリセットに基づいて、利用可能な最も特殊なインスタンスを取得するクリーンな方法を探しています。
これまでのところ、私が思いついた「最もクリーンな」アプローチは次のようになります。
class RemoteHost(models.Model):
    ...
    def get_specialized_instance(self):
        try:
            return self.sshhost.get_specialized_instance()
        except self.DoesNotExist:
            return self
class SshHost(RemoteHost):
    ...
    def get_specialized_instance(self):
        try:
            return self.esxihost.get_specialized_instance()
        except self.DoesNotExist:
            return self
class EsxiHost(SshHost):
    ...
    def get_specialized_instance(self):
        return self
このアプローチの利点は、それが機能することです:-)
しかし、私は次の理由でそれが好きではありません。
get_specialized_instance()オブジェクトを明示的に呼び出す using コードが必要です。- 基本モデルは、それらを拡張するモデルについて認識している必要があります。
 
したがって、これを達成するためのより良い/よりクリーンな方法に関するアドバイスは大歓迎です!