Как добавить дополнительные поля и удалить или изменить текст в django UserCreationForm?
Я создаю веб-страницу на django для личного проекта с базовой системой входа/подписки. Моя проблема в том, что я хочу добавить дополнительные поля ввода, такие как имя и фамилия, а также изменить текст по умолчанию, в основном изменить его на другой язык.
Я пытался создать CustomField, но ничего не получилось
Для вашего пользовательского админа, если вы наследуете от стандартного UserAdmin из "django.contrib.auth.admin", перезапишите переменную класса "add_fieldsets" с вашими необходимыми полями, чтобы добавить новые поля.
Для удаления текста подсказки перезапишите "add_form" вашей пользовательской формой добавления. Чтобы создать новую форму добавления, наследуйте UserCreationForm из "django.contrib.auth.forms" и перепишите поля "password1" и "password2", чтобы убрать текст подсказки для пароля.
в вашем файле admin.py
@admin.register(CustomUser)
class CustomUserAdmin(UserAdmin):
fieldsets = (
(None, {"fields": ("username", "password")}),
(_("Personal info"), {"fields": ("first_name", "last_name", "email")}),
(
_("Permissions"),
{
"fields": (
"is_active",
"is_staff",
"is_superuser",
"groups",
"user_permissions",
),
},
),
(_("Important dates"), {"fields": ("last_login", "date_joined")}),
)
add_fieldsets = (
( None, {
"classes": ("wide",),
"fields": ("username", "password1", "password2", "first_name", "last_name", "email", "is_staff", "is_active"),
},
),
)
list_display = ("pk", "username", "email", "full_name", "is_staff", "is_active")
list_filter = ("is_active", "is_staff",)
search_fields = ("username", "first_name", "last_name", "email")
ordering = ("email",)
filter_horizontal = (
"groups",
"user_permissions",
)
add_form = CustomUserCreationForm
class CustomUserCreationForm(UserCreationForm):
password1 = forms.CharField(
label=_("Password"),
strip=False,
widget=forms.PasswordInput(attrs={"autocomplete": "new-password"}),
)
password2 = forms.CharField(
label=_("Password confirmation"),
widget=forms.PasswordInput(attrs={"autocomplete": "new-password"}),
strip=False,
)
Django предоставил UserCreationForm api для создания нового пользователя с тремя обязательными полями (имя пользователя, пароль1, пароль2), но вы можете переопределить UserCreationForm следующим образом и добавить больше полей из стандартной модели пользователя Django.
form.py
from django.contrib.auth.forms import UserCreationForm
# User Signup
class UserCreateForm(UserCreationForm):
password1 = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control'}))
password2 = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control'}))
class Meta:
model = User
fields = ['username','email','first_name','last_name','password1','password2']
widgets = {
'username':forms.TextInput(attrs={'class':'form-control'}),
# 'first_name':forms.TextInput(attrs={'class':'form-control'}),
# 'last_name':forms.TextInput(attrs={'class':'form-control'}),
'email':forms.EmailInput(attrs={'class':'form-control'}),
}
для удаления ненужного текста вы можете перебрать все поля формы следующим образом
HTML код
<form action="" method="POST">
{% csrf_token %}
{% for fm in form %}
<label >{{fm.label}}</label>
{{fm}}
{% endfor %}
</form>