扩展 Django 用户模型的属性错误?

Attribute error in extending django user model?

我以前做过这个并且运行良好。这是因为我正在使用 django2.0 吗?

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'。我不明白?

要访问与 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()