タイトルの通り.
子クラスの名前がわかってる場合は,
parent_obj.child
でアクセス可能だけど,継承している子クラスが複数あって,どのクラスのオブジェクトに対応づいているか不明な場合は,工夫がいる.
related_objects から対応付くクラスの一覧を取得して,getattrでテキストで指定してアクセスすればOK.
こういう書き方をしておくと,子クラスを増やしたときに,書き換える必要がないから楽.
コードは以下の通り.
class Parent(models.Model):
def get_child(self):
"""継承する子クラスのオブジェクトを返す"""
children = self._meta.related_objects # 継承している子クラス一覧を見つける
for c in children:
try:
child = getattr(self, c.name) # テキストで指定したselfのインスタンス変数にアクセス
except getattr(ImageDatabase, c.name).RelatedObjectDoesNotExist: # テキストで指定したクラス変数にアクセス
pass # 対応するオブジェクトがなければ何もしない
return child
class Child(ImageDatabase):
parent = models.OneToOneField(to= Parent, related_name='relation')
でも,もっとちゃんとした方法があるかも.
誰か知ってたら教えてほしい.
0 件のコメント:
コメントを投稿