Сохранить дополнительные значения полей в базу данных на странице регистрации django
Мне удается получить дополнительное поле - state_name
на странице регистрации (используя forms.ModelForm
) но я изо всех сил пытаюсь сохранить его в базе данных.
У меня есть 2 подключения к базе данных, база данных по умолчанию - хранить таблицы Django и project_db, чтобы таблицы программ задавались вопросом, не вызывает ли это проблемы? или с файлом forms.py?
Ниже находится файл forms.py.
class UsersRegisterForm(forms.ModelForm):
class Meta:
model = User
fields = [
"username",
"state_name",
"email",
"confirm_email",
"password",
]
username = forms.CharField()
state_name = forms.ModelChoiceField(queryset=SchPartneredStates.objects.all(),empty_label=None)
email = forms.EmailField(label="Email")
confirm_email = forms.EmailField(label="Confirm Email")
password = forms.CharField(widget=forms.PasswordInput)
def __init__(self, *args, **kwargs):
super(UsersRegisterForm, self).__init__(*args, **kwargs)
self.fields['username'].widget.attrs.update({
'class': 'form-control',
"name": "username"})
self.fields['state_name'].widget.attrs.update({
'class': 'form-control',
"name": "state_name"})
self.fields['email'].widget.attrs.update({
'class': 'form-control',
"name": "email"})
self.fields['confirm_email'].widget.attrs.update({
'class': 'form-control',
"name": "confirm_email"})
self.fields['password'].widget.attrs.update({
'class': 'form-control',
"name": "password"})
def clean(self, *args, **keyargs):
email = self.cleaned_data.get("email")
confirm_email = self.cleaned_data.get("confirm_email")
username = self.cleaned_data.get("username")
state_name = self.cleaned_data.get("state_name")
password = self.cleaned_data.get("password")
if email != confirm_email:
raise forms.ValidationError("Email must match")
email_qs = User.objects.filter(email=email)
if email_qs.exists():
raise forms.ValidationError("Email is already registered")
username_qs = User.objects.filter(username=username)
if username_qs.exists():
raise forms.ValidationError("User with this username already registered")
if len(password) < 8: # you can add more validations for password
raise forms.ValidationError("Password must be greater than 8 characters")
return super(UsersRegisterForm, self).clean(*args, **keyargs)