Расширение пользовательской административной формы в django - PullRequest
2 голосов
/ 09 ноября 2011

Я пытаюсь сменить админа в Django.В моем проекте требуется адрес электронной почты, имя и фамилия.Я изменил свой пользовательский администратор следующим образом:

class UserForm(forms.ModelForm):
    class Meta:
        model = User

    def __init__(self, *args, **kwargs):
        super(UserForm, self).__init__(*args, **kwargs)
        self.fields['email'].required = True
        self.fields['first_name'].required = True
        self.fields['last_name'].required = True

class UserAdmin(admin.ModelAdmin):
    form = UserForm
    list_display = ('first_name','last_name','email','is_active')

admin.site.unregister(User)
admin.site.register(User, UserAdmin)

Проблема заключается в том, что всякий раз, когда я сохраняю пользователя с паролем, он отображается как без хэширования.Думаю, проблема в том, что мне нужно хешировать поле пароля с моей новой формой.Но старая форма делает это, так есть ли способ, которым я могу расширить старую форму?

1 Ответ

5 голосов
/ 09 ноября 2011

Вы можете создать подкласс существующего UserChangeForm в django.contrib.auth.forms и настроить его поведение, вместо того, чтобы создавать подклассы forms.ModelForm.

from django.contrib.auth.forms import UserChangeForm

class MyUserChangeForm(UserChangeForm):
    def __init__(self, *args, **kwargs):
        super(MyUserChangeForm, self).__init__(*args, **kwargs)
        self.fields['email'].required = True
        self.fields['first_name'].required = True
        self.fields['last_name'].required = True

class UserAdmin(admin.ModelAdmin):
    form = MyUserChangeForm

admin.site.unregister(User)
admin.site.register(User, UserAdmin)

Приведенное выше будет использовать поведение по умолчанию для пароля пользователя, а именно отображать хэш пароля и ссылку на форму смены пароля. Если вы хотите изменить это, я бы посмотрел на SetPasswordForm, чтобы увидеть, как пароль устанавливается в админке Django.

...