【发布时间】:2022-01-26 02:15:31
【问题描述】:
我有 2 个模型,如图所示的 Account 模型
class Account(AbstractBaseUser,PermissionsMixin):
email = models.EmailField(max_length=100, unique = True)
username = models.CharField(max_length = 30)
is_admin = models.BooleanField(default = False)
is_staff = models.BooleanField(default = False)
is_active = models.BooleanField(default = False)
date_joined = models.DateTimeField(auto_now_add = True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = [
'username'
]
以及如下图的配置文件表
class Profile(models.Model):
user = models.OneToOneField(Account, on_delete = models.CASCADE)
avatar = models.ImageField(default = "defaultpic.png", blank = True, null = True, upload_to="MEDIA_FILES" )
tel = PhoneField(blank=False, null = False)
ProfileSerializer
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = [
'avatar',
'tel',
]
用户序列化器
class AccountSerializer(serializers.ModelSerializer):
profile = ProfileSerializer(read_only = True)
class Meta:
model = get_user_model()
fields = [
'email',
'username',
'password',
'profile'
]
extra_kwargs = {
'password': {'write_only': True},
}
def create(self, validated_data):
user_password = validated_data.pop('password')
user = get_user_model()(
email = validated_data['email'],
username = validated_data['username']
)
user.set_password(user_password)
user.save()
user.email_user("Hello world")
return user
注册新用户的端点
@api_view(["POST"]) @permission_classes([AllowAny, ])
定义寄存器(请求): profSerializer = ProfileSerializer(数据 = request.data) 序列化器 = AccountSerializer( 数据 = request.data )
if serializer.is_valid():
serializer.save()
serializer.send_mail("Hello")
return JsonResponse( serializer.data )
else:
print( serializer.errors )
return JsonResponse( { "_err": serializer.errors } )
当我向注册端点发送发布请求时,我的问题出现了,配置文件字段保持为空,头像字段分配了默认值 default.png。每当用户注册时,我都需要端点来创建用户帐户和个人资料条目
对端点的 post 请求是以下 JSON
{
email:"some email",
username:"username",
password:"password",
tel:"tel number",
avatar:"image"
}
【问题讨论】: