发布到我的api创建用户时出现以下错误:
我正在使用以下功能:
def create(self, validated_data):
user_data = validated_data.pop('user')
print(validated_data)
user = User.objects.create(**user_data)
validated_data.user_id = user.id
print(validated_data)
profile = Profile.objects.create(**validated_data)
return profile
我的用户创建完美,但在我尝试创建个人资料时出现错误。
validated_data在用户弹出后包含以下内容:
{'phone': '81156598', 'birth_date': datetime.date(2017, 6, 29)}
我之后添加了创建的用户的user_id并将其传递到我的Profile.objects.create(**validated_data)
但我得到的birth_date不能为null错误。我是否需要从帖子中获取所有日期格式,然后将其发送回validated_data?不应该有另一种方式吗?
谢谢
修改:
这是个人资料模型
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
class Profile(models.Model):
phone = models.CharField(max_length=255, blank=False)
birth_date = models.DateField(blank=False)
user = models.OneToOneField(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()
def __str__(self):
return "{}".format(self.user.username)
答案 0 :(得分:1)
错误在这里:
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
创建用户后使用信号创建配置文件,创建配置文件实例时,您没有通过var birth_day(null = False),那么当您创建用户时不会出现错误在birth_date = models.DateField(null=True,blank=False)
中创建个人资料时,创建个人资料。birth_day
或将datetime.now()
设置为create_user_profile
。
并且您可以在配置文件中更改创建,当您创建用户时,create_user_profile
将创建配置文件,您需要在创建手册之前检查用户是否有配置文件。