Сохранить дополнительные значения полей в базу данных на странице регистрации 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)

0 ответов

Другие вопросы по тегам