2017-12-24 10 views
0

私は以前これをして、うまく動作しました。これは私がdjango2.0を使用しているからですか?djangoユーザーモデルを拡張する際に属性エラーが発生しましたか?

models.py

class Profile(models.Model): 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    .... 

@receiver(post_save, sender=User) 
def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     Profile.objects.create(user=instance) 

@receiver(post_save, sender=User) 
    def save_user_profile(sender, instance, **kwargs): 
     instance.profile.save() 

私はエラーAttributeError: 'User' object has no attribute 'profile'を取得します。理解できません?

答えて

1

ForeignKeyのプロファイルで逆の関係にアクセスするには、profile_setを使用する必要があります。あなたが取得して保存する必要がある場合は最初の関連オブジェクトは、これを試してみてください。

def save_user_profile(sender, instance, **kwargs): 
    instance.profile_set.first().save() 

しかし、このような状況で私はあなたがより良いOneToOneFieldを使用したいと考えている:

も一つだけ、関連するプロファイルを作成することを可能にし、
user = models.OneToOneField(User, on_delete=models.CASCADE) 

この構文を許可します:

def save_user_profile(sender, instance, **kwargs): 
    instance.profile.save() 
関連する問題