更改用户时如何不显示密码?
How not to show the password when changing the user?
我有一个带有自定义文件的自定义 UserAdmin。当我添加新用户时就可以了。但是当我想更改用户信息时,我看到了他的哈希密码。如何不显示密码?
这是我的最高用户管理员。
class UserAdminForm(forms.ModelForm):
middle_name = forms.CharField(label='Отчество', empty_value='1 ', required=False)
class Meta:
labels = {
'last_name': 'Фамилия',
'first_name': 'Имя',
'password': 'Пароль',
}
class UserAdmin(admin.ModelAdmin):
form = UserAdminForm
fields = ['username', 'password', 'last_name', 'first_name', 'middle_name', 'groups']
list_display = ['username', 'last_name', 'first_name', 'url_get_money_from_user']
def url_get_money_from_user(self, obj):
return format_html('<a href="/admin/fbp_common/person/{}/change/">{}</a>', obj.person.id, 'Списать средства')
url_get_money_from_user.allow_tags = True
url_get_money_from_user.short_description = 'Ссылка для списания денежных средств'
def save_model(self, request, obj, form, change):
obj.is_staff = True
obj.set_password(form.data['password'])
obj.save()
可能您想覆盖 get_fields 表单方法以根据管理中的 create/change 操作动态更改字段:
def get_fields(self, request, obj=None):
if obj:
# record already exists - lets hide the password
return ('username', 'last_name', 'first_name', 'middle_name', 'groups')
return super().get_fields(request, obj)
我找到了解决办法。我应该使用 PasswordInput
并将其放入 class Meta
中的 widgets
from django.forms import PasswordInput
class UserAdminForm(forms.ModelForm):
middle_name = forms.CharField(label='Отчество', empty_value='1 ', required=False)
class Meta:
model = User
fields = ['username', 'password', 'last_name', 'first_name', 'middle_name', 'groups']
labels = {
'last_name': 'Фамилия',
'first_name': 'Имя',
'password': 'Пароль',
}
widgets = {
'password': PasswordInput(),
}
我的密码输入字段为空。
我有一个带有自定义文件的自定义 UserAdmin。当我添加新用户时就可以了。但是当我想更改用户信息时,我看到了他的哈希密码。如何不显示密码?
这是我的最高用户管理员。
class UserAdminForm(forms.ModelForm):
middle_name = forms.CharField(label='Отчество', empty_value='1 ', required=False)
class Meta:
labels = {
'last_name': 'Фамилия',
'first_name': 'Имя',
'password': 'Пароль',
}
class UserAdmin(admin.ModelAdmin):
form = UserAdminForm
fields = ['username', 'password', 'last_name', 'first_name', 'middle_name', 'groups']
list_display = ['username', 'last_name', 'first_name', 'url_get_money_from_user']
def url_get_money_from_user(self, obj):
return format_html('<a href="/admin/fbp_common/person/{}/change/">{}</a>', obj.person.id, 'Списать средства')
url_get_money_from_user.allow_tags = True
url_get_money_from_user.short_description = 'Ссылка для списания денежных средств'
def save_model(self, request, obj, form, change):
obj.is_staff = True
obj.set_password(form.data['password'])
obj.save()
可能您想覆盖 get_fields 表单方法以根据管理中的 create/change 操作动态更改字段:
def get_fields(self, request, obj=None):
if obj:
# record already exists - lets hide the password
return ('username', 'last_name', 'first_name', 'middle_name', 'groups')
return super().get_fields(request, obj)
我找到了解决办法。我应该使用 PasswordInput
并将其放入 class Meta
widgets
from django.forms import PasswordInput
class UserAdminForm(forms.ModelForm):
middle_name = forms.CharField(label='Отчество', empty_value='1 ', required=False)
class Meta:
model = User
fields = ['username', 'password', 'last_name', 'first_name', 'middle_name', 'groups']
labels = {
'last_name': 'Фамилия',
'first_name': 'Имя',
'password': 'Пароль',
}
widgets = {
'password': PasswordInput(),
}
我的密码输入字段为空。