更改用户时如何不显示密码?

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(),
        }

我的密码输入字段为空。