Как не показывать пароль при смене пользователя? - PullRequest
3 голосов
/ 30 января 2020

У меня есть пользовательский UserAdmin с пользовательскими полями. Когда я добавляю нового пользователя, это нормально. Но когда я хочу изменить информацию о пользователе, я вижу его хешированный пароль. Как не показать пароль? enter image description here

Это мой главный пользователь Admin.

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

Ответы [ 2 ]

2 голосов
/ 30 января 2020

Я нашел решение. Я должен использовать PasswordInput и поставить его на widgets в class Meta

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

И я получаю пустое поле ввода для пароля. enter image description here

0 голосов
/ 30 января 2020

Возможно, вы хотите переопределить get_fields метод формы для динамического изменения полей в зависимости от действия создания / изменения в admin:

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)
...