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

注册时phone_number与library_id无法保存至Profile模型问题

问题解决:注册表单中phone_number和library_id无法保存到Profile

问题原因

  1. 视图层保存逻辑错误:你在views.py中调用form.save(commit=False)后直接手动执行user.save(),跳过了RegisterForm自定义save方法里的Profile创建逻辑。commit=False会让表单的save方法跳过if commit:块中的Profile创建代码,而手动user.save()会触发signals.py中的post_save信号,生成一个空的Profile。
  2. 信号与表单逻辑冲突:signals.py中的create_user_profile信号会在用户创建时自动生成空Profile,抢先于表单的创建逻辑生成无数据的Profile,导致最终数据库中保存的是空值。

修复步骤

步骤1:修正视图中的保存逻辑

修改views.py的POST请求处理部分,直接调用form.save()完成用户和Profile的保存,不要手动调用user.save():

def user_register(request):
    userIsAuthenticated = request.user.is_authenticated
    username1 = request.user.username if userIsAuthenticated else "N/A"

    if request.method == 'GET':
        form = RegisterForm()
        return render(request, "register.html", {"form":form, "username": username1, "userIsAuthenticated": userIsAuthenticated})
    
    if request.method == 'POST':
        form = RegisterForm(request.POST) 
        if form.is_valid():
            user = form.save()  # 直接调用save,触发表单内的Profile创建逻辑
            login(request, user)
            return render(request, "register-success.html")
        else:
            return render(request, 'register.html', {"form":form, "username": username1, "userIsAuthenticated": userIsAuthenticated})

步骤2:修复信号逻辑(二选一)

选项A:移除重复的Profile创建信号

删除signals.py中的create_user_profile接收器,因为表单已经负责创建带数据的Profile:

# 删除这段代码
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

选项B:修改信号避免重复创建

如果需要保留信号(比如支持通过其他方式创建用户时自动生成Profile),将信号改为get_or_create,避免重复创建:

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        # 仅当Profile不存在时创建,避免重复
        Profile.objects.get_or_create(user=instance)

验证修复

重新提交注册表单后,查看Profile表,phone_number和library_id字段应该能正常保存提交的值。

内容的提问来源于stack exchange,提问作者Václav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:17:07