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

Cookiecutter-Django自定义User模型invitation_code字段无法存入数据库

问题描述

我在使用Cookiecutter-Django时遇到问题:已在users.models.User中添加invitation_code字段,代码如下:

class User(AbstractUser):
    """
    Default custom user model for pintable.
    If adding fields that need to be filled at user signup,
    check forms.SignupForm and forms.SocialSignupForms accordingly.
    """

    #: First and last name do not cover name patterns around the globe
    name = CharField(_("Full name"), max_length=255, null=True, blank=True)
    first_name = None  # type: ignore
    last_name = None  # type: ignore

    invitation_code = CharField(
        _("Invitation code"), max_length=8, null=True, blank=True
    )

随后在users.forms.UserSignupForm中添加该字段,代码如下:

class UserSignupForm(SignupForm):
    """
    Form that will be rendered on a user sign up section/screen.
    Default fields will be added automatically.
    Check UserSocialSignupForm for accounts created from social.
    """

    invitation_code = CharField(
        label=_("Invitation code"),
        widget=TextInput(attrs={"placeholder": _("Invitation code")}),
    )

但新用户保存到数据库时,invitation_code字段始终为None,请问我遗漏了什么?

解决方案

Cookiecutter-Django的SignupForm不会自动将自定义表单字段的值同步到用户模型,必须重写表单的save方法手动处理:

修改UserSignupForm,添加save方法:

class UserSignupForm(SignupForm):
    """
    Form that will be rendered on a user sign up section/screen.
    Default fields will be added automatically.
    Check UserSocialSignupForm for accounts created from social.
    """

    invitation_code = CharField(
        label=_("Invitation code"),
        widget=TextInput(attrs={"placeholder": _("Invitation code")}),
    )

    def save(self, request):
        # 调用父类方法创建用户实例
        user = super().save(request)
        # 将表单清洗后的邀请码赋值给用户
        user.invitation_code = self.cleaned_data.get("invitation_code")
        user.save()
        return user

额外注意事项:

  • 如果邀请码是必填项,给表单的invitation_code字段添加required=True,防止提交空值
  • 确认已执行数据库迁移:运行python manage.py makemigrations和python manage.py migrate,确保字段已同步到数据库表中

内容的提问来源于stack exchange,提问作者masavini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:04:56