I'm trying to create a registration for each new account using the UserCreationForm
from the form to CreateView
class-base view generics from views, from my customize auth model using AbstractUser
but everytime submit the form it gives me this error:
1048, "Column 'last_name' cannot be null"
But I already fill in the last_name input
here is my views for creating account:
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')
Here is the form:
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
Note that I already put AUTH_USER_MODEL
on the settings by
and I can use to login some accounts already register in the auth model generated by this:
python manage.py createsuperuser