이 모든 것을 너무 늦게하고 있습니다. 사용자 생성 양식에서는 입력란 password1
및 password2
을 입력하지 않아도 양식을 게시 할 수 없습니다. 필드가 비어 있으면 UserAdmin.save_model()
방법을 사용할 수 없습니다.
그러나 사용자 작성 양식의 save()
메서드를 재정의하여 암호 필드를 비워두고 필드가 비어 있으면 암호를 임의로 설정하거나 입력 한 경우 사용자의 암호를 사용할 수 있습니다.
보너스로,이 코드는 사용자가 암호 (암호 불일치)를 입력 한 경우 유효성 검사 양식을 유지하고 AUTH_PASSWORD_VALIDATORS
(모두 빈 암호 필드가 0 문자이므로 'django.contrib.auth.password_validation.MinimumLengthValidator'
을 제외한 모든 문자)을 검사합니다.
### admin.py
from django import forms
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class CustomUserCreationForm(UserCreationForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['password1'].required = False
self.fields['password2'].required = False
def _clean_form(self):
super()._clean_form()
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 != password2:
self.add_error('password2', self.error_messages['password_mismatch'])
def save(self, commit=True):
user = super().save(commit=False)
user_password = self.cleaned_data["password1"]
if not user_password:
user_password = User.objects.make_random_password()
user.set_password(user_password)
if commit:
user.save()
return user
class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreationForm
# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)