You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 01:15:02