Форма отображается без ошибок на странице редактирования пользователя

Я использую Django и редактирую страницу пользователя. Когда я нажимаю кнопку submit, она не проходит. Ошибка не найдена, и я не могу определить, где кроется проблема. Надеюсь, кто-нибудь сможет мне помочь или указать на мою ошибку.

Страница профиля пользователя содержит только имя_пользователя, имя_посредине, имя_последня, номер_мобильного_телефона, имя пользователя и электронную почту. Она не содержит пароля. Спасибо

Forms.py

class UserManagementForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ['first_name', 'middle_name', 'last_name', 'username', 'email', 'mobile_number', 'password']

    ROLE_CHOICE = (
        (2, 'Admin'),
        (3, 'Super Admin')
    )

    ROLE_CHOICE_1 = (
        (1, 'Member'),
        (2, 'Admin'),
        (3, 'Super Admin')
    )


    first_name = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Jones', 'class': 'form-control ', }))
    middle_name = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'A', 'class': 'form-control', }))
    last_name = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Smith', 'class': 'form-control',}))
     mobile_number = forms.CharField(max_length=15, validators=[RegexValidator(
    '^\+[0-9]{1,3}\.?\s?\d{8,13}', message="Phone number must not consist of space and requires country code. eg : +639171234567")],widget=forms.TextInput(attrs={'placeholder': '09123456789', 'class': 'form-control',}),
                                error_messages={'unique': ("Mobile Number already exists.")})

    email = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'jonesmith@gmail.com', 'class': 'form-control',}),
                        error_messages={'unique': ("Email already exists.")},)
    username = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control',}),
                           error_messages={'unique': ("Username already exists.")},)
    password = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'form-control',}))
    confirm_password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': '********', 'class': 'form-control', }))
    role = forms.CharField(widget=forms.Select(choices=ROLE_CHOICE, attrs={ 'class': 'form-control', }))




    def __init__(self, *args, **kwargs):
        ROLE_CHOICE_1 = (
        (1, 'Member'),
        (2, 'Admin'),
        (3, 'Super Admin')
    )
        super(UserManagementForm, self).__init__(*args, **kwargs)
        instance = getattr(self, 'instance', None)
        if instance and instance.pk:
            self.fields['role'].widget.choices = ROLE_CHOICE_1
    
    def clean(self):
        clean_data = super(UserManagementForm, self).clean()
        password = clean_data.get('password')
        confirm_password = clean_data.get('confirm_password')
    
    
    
        if password != confirm_password:
            raise forms.ValidationError(
                "Password and Confirm Password does not match!"
            )

    def save(self, commit=True):
        user = super(UserManagementForm, self).save(commit=False)
        password = self.cleaned_data["password"]
        if password:
            user.set_password(password)
        if commit:
            user.save()
        return user

Models.py

class User(AbstractBaseUser):
MEMBER = 1
ADMIN = 2
SUPERADMIN = 3
ROLE_CHOICE = (
    (MEMBER, 'Member'),
    (ADMIN, 'Admin'),
    (SUPERADMIN, 'Super Admin')
)

ACTIVE = 1
DELETED = 2
DEACTIVATED = 3

STATUS = (
    (ACTIVE, 'Active'),
    (DELETED, 'Deleted'),
    (DEACTIVATED, 'Deactivated')
)

first_name = models.CharField(max_length=50)
middle_name = models.CharField(max_length=50, default="Some String")
last_name = models.CharField(max_length=50)
username = models.CharField(max_length=50, unique=True)
email = models.EmailField(max_length=100, unique=True)
mobile_number = models.CharField(max_length = 100, db_index=True, null = True, validators=[
    
        RegexValidator(
            regex='^(\+\d{1,3})?,?\s?\d{8,13}',
            message='Phone number must not consist of space and requires country code. eg : +639171234567',
        ),
    ])
password = models.CharField(max_length = 100,validators=[MinLengthValidator(8),
        
    ])
role = models.PositiveSmallIntegerField(choices=ROLE_CHOICE, blank=True, null=True)
status = models.PositiveSmallIntegerField(choices=STATUS, blank=True, null=True)

# required fields
date_joined = models.DateTimeField(auto_now_add=True)
last_login = models.DateTimeField(auto_now_add=True)
created_date= models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now_add=True)
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
is_superadmin = models.BooleanField(default=False)

USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email', 'first_name', 'middle_name', 'last_name', 'mobile_number']

Views.py

def super_user_account_edit(request, id=None):
user = get_object_or_404(User, pk=id)
if request.method == 'POST':
    form = UserManagementForm(request.POST, instance=user)
    if form.is_valid():
        form.save()
        messages.success(request, 'Category updated successfully!')
        return redirect('super_user_account')
    else:
        print(form.errors)

else:
    form = UserManagementForm(instance=user)
context = {
    'form': form,
    'user': user,
}
return render(request, 'pages/super_user_account_edit.html', context)

Возможно, вам потребуется добавить строку {{ form.non_field_errors }} (docs) к форме в вашем шаблоне. Это связано с тем, что если возникает ошибка валидации, не связанная с конкретным полем, она будет отображаться только в том случае, если вы включите эту строку.

Вернуться на верх