Django Rest Framework创建和更新用户个人资料

时间:2018-04-16 11:26:04

标签: django django-rest-framework

我正在构建一个DRF项目,并使用 django-allauth django-rest-auth 启用了用户身份验证和注册。通过提供用户名,电子邮件,密码1和密码2来注册新用户。

我想在创建用户时创建用户个人资料,但是他必须在注册时输入与个人资料相关的任何内容。用户可以随时编辑此配置文件,只要他愿意。我的用户个人资料模型:

class Profile(models.Model):
    user = models.OneToOneField(User, blank=True, on_delete=models.CASCADE, )
    name = models.CharField(max_length=50, blank=True, )
    age = models.IntegerField(blank=True, )
    ...
    ...

在serializers.py中我有:

class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        fields = '__all__'

我看到一些帖子为Profile模型添加了以下方法:

@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()

使用它们,用户已创建但未创建配置文件,我收到错误IntegrityError: (1048, "Column 'age' cannot be null")

创建和更新此类个人资料的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

首先,您需要浏览此帖子Differentiate null=True, blank=True in django

要解决您的问题(IntegrityError),您必须将null=True添加到模型字段中,如下所示

class Profile(models.Model):
    user = models.OneToOneField(User, blank=True, on_delete=models.CASCADE, )
    name = models.CharField(max_length=50, blank=True, null=True)
    age = models.IntegerField(blank=True, null=True)
    ...
    ...

我认为您不需要来自同一signalssender)的两个USER