Django REST Framework注册接口如何保存User关联Profile的扩展属性
解决方案
你只需要调整注册序列化器的保存逻辑,配合现有的自动创建Profile的信号即可完成字段存储,具体操作如下:
步骤1:修复Profile模型必填字段默认值
先检查你当前的Profile模型,status字段未设置默认值,信号触发创建空Profile实例时会因为缺少必填字段报错,先给该字段补充默认值:
status = StatusField( _("status of the user"), default="active" # 取值和你定义的STATUS选项对应即可 )
步骤2:修改注册序列化器的save方法
你已经在get_cleaned_data中获取到了full_name、phone_number两个Profile字段,且信号已经在User创建后自动生成了关联的空Profile实例,直接给关联的Profile实例赋值保存即可:
from django.db import transaction # 引入事务保证用户和Profile数据一致性 def save(self, request): # pylint: disable=arguments-differ adapter = get_adapter() user = adapter.new_user(request) self.cleaned_data = self.get_cleaned_data() # 事务包裹:保证User和Profile要么同时保存成功,要么全部回滚 with transaction.atomic(): adapter.save_user(request, user, self) # 填充Profile字段 user.profile.full_name = self.cleaned_data['full_name'] user.profile.phone_number = self.cleaned_data['phone_number'] # 后续如果新增其他Profile字段需要在注册时赋值,也在这里补充即可 user.profile.save() self.custom_signup(request, user) setup_user_email(request, user, []) return user
调整完成后,注册接口传入的姓名、手机号就会自动存入关联的Profile表中。
内容的提问来源于stack exchange,提问作者MrOldSir
相关产品推荐
相关产品推荐

