OneToOneField
とリンクしているモデルがあります。例:現在のモデルに見つからない場合は、1対1のリンクされたモデルのすべての属性にアクセスします。
class Profile(models.Model):
#other fields ...
user = models.OneToOneField(User, null=True, blank=True)
属性がプロファイルまたはユーザーに存在する場合は、ドット表記で属性を取得したいと考えています。例えば
class Profile(models.Model):
....
def __getattr__(self, name):
if self.user:
return self.user.name
else:
raise AttributeError
return super().__getattr__(self,name)
、Profile
はemail
フィールドを持っていない場合、私はそれがUser
に存在する場合(profile
はProfile
インスタンスである)profile.email
としてそれを取得したいと思い:私は次のことをやりました。
ただし、以下のようなエラーが発生します。
if self.user:
RuntimeError: maximum recursion depth exceeded
どのように私は、この動作を達成することができます - 現在のインスタンスから属性を取得し、利用できない場合、および1対1のフィールドはどれも、そこに引きませんか?
達成しようとしている動作がわかりません。なぜ 'Profile'モデルに' profile'属性がありますか?あなたは 'getattr(self.profile、name)を返す'を意味しますか? – miyamoto
@miyamoto私は修正しました。私は実際に 'self.user'を意味しました。ありがとう。 – DurgaDatta