【问题标题】:1048, "Column 'last_name' cannot be null" Django AbstractUser1048,“列 'last_name' 不能为空” Django AbstractUser
【发布时间】:2020-12-25 14:54:53
【问题描述】:

我正在尝试使用 UserCreationForm 从表单到 CreateView 类基础视图泛型为每个新帐户创建注册,从我的自定义身份验证模型使用 AbstractUser 但每次提交表单给我这个错误:

1048, "Column 'last_name' cannot be null"

但是我已经填写了姓氏input

这是我对创建帐户的看法:

class AccountCreateView(LoginRequiredMixin, CreateView):
    template_name = 'components/crud/form.html'
    form_class    = AccountForm

    def get_context_data(self, **kwargs):
        kwargs['context_title']        = 'New Account'
        kwargs['context_icon']         = '<em class="fa fa-plus"></em>'
        kwargs['context_button_title'] = 'Create Account'
        return super().get_context_data(**kwargs)

    def form_valid(self, form):
        print(self.request.POST.get('last_name'))
        try:
            self.object = form.save()
            messages.success(self.request, '<em class="fa fa-check"></em> Account created!')
        except IntegrityError as e:
            messages.error(self.request, f'<em class="fa fa-exclamation"></em> {e}')
            return self.form_invalid(form)
        return super().form_valid(form)

    def form_invalid(self, form):
        return super().form_invalid(form)

    def get_success_url(self):
        return reverse_lazy('apps:newaccount')

这是表格:

class AccountForm(UserCreationForm):

    def clean_first_name(self):
        data = self.cleaned_data.get('first_name')
        if data == '':
            raise forms.ValidationError(_('What\'s your name?'))
        return data

    def clean_last_name(self):
        data = self.cleaned_data.get('last_name')
        if data == '':
            raise forms.ValidationError(_('What\'s your last name?'))

    def clean_email(self):
        data = self.cleaned_data.get('email')
        if data == '':
            raise forms.ValidationError(_('What\'s was the email address for this account?'))
        return data

    def clean_username(self):
        data = self.cleaned_data.get('username')
        if data == '':
            raise forms.ValidationError(_('Provide your username.'))
        return data

    def __init__(self, *args, **kwargs):
        super(AccountForm, self).__init__(*args, **kwargs)
        self.fields['username'].widget.attrs.pop('autofocus', None)
        self.fields['first_name'].widget.attrs.update({
            'autofocus': True
        })
        for field in self.fields:
            self.fields[field].required = False
            self.fields[field].widget.attrs.update({
                'class': 'form-control'
            })

    class Meta(UserCreationForm.Meta):
        model  = Users
        fields = ('first_name', 'last_name', 'email', 'user_type', ) + UserCreationForm.Meta.fields

请注意,我已经将AUTH_USER_MODEL 放在了设置中 我可以用来登录一些已经在由此生成的身份验证模型中注册的帐户:

python manage.py createsuperuser

【问题讨论】:

    标签: django django-authentication django-auth-models


    【解决方案1】:

    您没有从 clean_last_name 返回数据,因此出错

    def clean_last_name(self):
        ....
        return data
    

    【讨论】:

    • 软糖!是的,我忘记了!只是因为这个我已经很困惑,我从来没有仔细看我的代码!哦,非常感谢!
    猜你喜欢
    • 2016-09-06
    • 2018-10-13
    • 2016-02-24
    • 2021-09-03
    • 2016-12-14
    • 2018-01-06
    • 2020-06-12
    • 1970-01-01
    • 2023-02-22
    相关资源
    最近更新 更多