重複の可能性:
Django モデルのポリモーフィズム
グループへの外部キーを持つ Constraint 抽象基本モデルがあります。いくつかのモデルは Constraint を継承して、さまざまな方法で動作します。これが私が持っているものの(非常に単純化された)バージョンです:
class Constraint(models.Model):
group = models.ForeignKey(Group)
def get_constraint_type(self):
return 'Base'
class meta:
abstract = True
class UserConstraint(Constraint):
user = models.ForeignKey(User)
def get_constraint_type(self):
return 'User'
class ProjectConstraint(Constraint):
project = models.ForeignKey(Project)
def get_constraint_type(self):
return 'Project'
グループを指定すると、それを指す制約モデル インスタンスのリストを作成できる必要があります。
たとえば、もしそうなら
group = ...
constraints = group.constraint_set.all()
for c in constraints:
print c.get_constrait_type()
現在、「ユーザー」、「プロジェクト」、「ユーザー」などではなく、「ベース」を何度も出力します。
本当にハックな解決策は、基本クラスで次のような関数を実装することです。
def get_child(self):
try:
return self.usercontraint
except UserConstraint.DoesNotExist:
pass
try:
return self.projectcontraint
except ProjectConstraint.DoesNotExist:
pass
# etc...
しかし、それは本当にひどいようです。より良い解決策はありますか?