Форма отображается без ошибок на странице редактирования пользователя
Я использую 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) к форме в вашем шаблоне. Это связано с тем, что если возникает ошибка валидации, не связанная с конкретным полем, она будет отображаться только в том случае, если вы включите эту строку.