Я обновляю приложение Django 3.0 до 5.1 и медленно продвигаюсь к каждому второстепенному выпуску. Пока все хорошо.
Однако, как только я перешел с Django 5.0 на 5.1, я увидел измененное поведение на моей странице «Создать нового пользователя», которая использует форму UserCreationForm, которая позволяет пустые пароли. Если пароль не указан, генерируется случайный пароль.
Теперь, если я отправлю форму с пустым паролем, я получаю ошибки «обязательного поля» в полях пароля, даже если они есть. оба явно установлены как require=False.
Я видел изменения UserCreationForm в Django 5.1.0 и 5.1.1. Я попробовал использовать AdminUserCreationForm и установить для поля usable_password значение None, но пустые пароли по-прежнему не принимаются, как раньше.
Есть идеи?
Окружающая среда
Python 3.12.8
Django 5.1.5
Crispy Формы 2.3
Упрощенный код
from django.contrib.auth.forms import AdminUserCreationForm
from crispy_forms.helper import FormHelper
class SignupForm(AdminUserCreationForm): # previously using UserCreationForm
usable_password = None # Newly added
# Form fields
sharedaccountflag = forms.ChoiceField(label = 'Cuenta compartida', required = True)
# Constructor
def __init__(self, *args, **kwargs):
# Call base class constructor
super(SignupForm, self).__init__(*args, **kwargs)
# Set password fields as optional
self.fields['password1'].required = False
self.fields['password2'].required = False
# Set form helper properties
self.helper = FormHelper()
self.helper.form_tag = False
# Specify model and which fields to include in form
class Meta:
model = get_user_model()
fields = ('password1', 'password2', 'sharedaccountflag')
screenshot
< /p>
обновление < /strong>
я использовал пример Serhii и изменил его, чтобы Нормальная проверка называется при необходимости. Я также изменил обратно, чтобы использовать userreationform :
class SignupForm(UserCreationForm):
# Override default validation to allow empty password (change in Django 5.1)
def validate_passwords(
self,
password1_field_name = "password1",
password2_field_name = "password2"
):
# Store password values
password1 = self.cleaned_data.get(password1_field_name)
password2 = self.cleaned_data.get(password2_field_name)
# Do nothing if passwords are not required and no value is provided
if (
not self.fields[password1_field_name].required and
not self.fields[password2_field_name].required and
not password1.strip() and
not password2.strip()
):
pass
# Call default validation if password is required OR a value is provided
else:
super().validate_passwords(password1_field_name, password2_field_name)
Подробнее здесь: https://stackoverflow.com/questions/793 ... -passwords
Django 5.1 - Usercreationform не разрешает пустые пароли ⇐ Python
Программы на Python
-
Anonymous
1737914114
Anonymous
Я обновляю приложение Django 3.0 до 5.1 и медленно продвигаюсь к каждому второстепенному выпуску. Пока все хорошо.
Однако, как только я перешел с Django 5.0 на 5.1, я увидел измененное поведение на моей странице «Создать нового пользователя», которая использует форму UserCreationForm, которая позволяет пустые пароли. Если пароль не указан, генерируется случайный пароль.
Теперь, если я отправлю форму с пустым паролем, я получаю ошибки «обязательного поля» в полях пароля, даже если они есть. оба явно установлены как require=False.
Я видел изменения UserCreationForm в Django 5.1.0 и 5.1.1. Я попробовал использовать AdminUserCreationForm и установить для поля usable_password значение None, но пустые пароли по-прежнему не принимаются, как раньше.
Есть идеи?
[b]Окружающая среда[/b]
Python 3.12.8
Django 5.1.5
Crispy Формы 2.3
[b]Упрощенный код[/b]
from django.contrib.auth.forms import AdminUserCreationForm
from crispy_forms.helper import FormHelper
class SignupForm(AdminUserCreationForm): # previously using UserCreationForm
usable_password = None # Newly added
# Form fields
sharedaccountflag = forms.ChoiceField(label = 'Cuenta compartida', required = True)
# Constructor
def __init__(self, *args, **kwargs):
# Call base class constructor
super(SignupForm, self).__init__(*args, **kwargs)
# Set password fields as optional
self.fields['password1'].required = False
self.fields['password2'].required = False
# Set form helper properties
self.helper = FormHelper()
self.helper.form_tag = False
# Specify model and which fields to include in form
class Meta:
model = get_user_model()
fields = ('password1', 'password2', 'sharedaccountflag')
[b] screenshot [/b]
< /p>
обновление < /strong>
я использовал пример Serhii и изменил его, чтобы Нормальная проверка называется при необходимости. Я также изменил обратно, чтобы использовать userreationform :
class SignupForm(UserCreationForm):
# Override default validation to allow empty password (change in Django 5.1)
def validate_passwords(
self,
password1_field_name = "password1",
password2_field_name = "password2"
):
# Store password values
password1 = self.cleaned_data.get(password1_field_name)
password2 = self.cleaned_data.get(password2_field_name)
# Do nothing if passwords are not required and no value is provided
if (
not self.fields[password1_field_name].required and
not self.fields[password2_field_name].required and
not password1.strip() and
not password2.strip()
):
pass
# Call default validation if password is required OR a value is provided
else:
super().validate_passwords(password1_field_name, password2_field_name)
Подробнее здесь: [url]https://stackoverflow.com/questions/79387857/django-5-1-usercreationform-wont-allow-empty-passwords[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия