Модификация Django UserCreationForm - PullRequest
9 голосов
/ 13 июля 2011

Я хотел добавить больше полей в стандартную Django UserCreationForm, поэтому я пошел дальше и вложил в него подклассы в файле forms.py моего приложения и получил следующее:

class CustomUserCreationForm(UserCreationForm):
    email = forms.EmailField(label = "Email")
    first_name = forms.CharField(label = "First name")
    last_name = forms.CharField(label = "Last name")

    class Meta:
        model = User
        fields = ("first_name", "last_name", "username",)

    def save(self, commit=True):
        user = super(CustomUserCreationForm, self).save(commit=False)
        user.first_name = first_name
        user.last_name = last_name
        user.email = self.cleaned_data["email"]
        if commit:
            user.save()
        return user

Затем я создал собственный ModelAdmin для своих пользователей, который выглядит следующим образом:

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    inlines = [ProfileInline,]


admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
admin.site.register(Class, ClassAdmin)

Независимо от того, что я делаю, новый CustomUserCreationForm не отображается, когда я захожу на страницу администратора и пытаюсь добавить нового пользователя. Где я облажался?

РЕДАКТИРОВАТЬ: Кажется, что форма не отображается, но используется. Если я пытаюсь добавить нового пользователя, используя только поля имени пользователя и пароля, которые есть в типичной форме UserCreationForm, я получаю сообщение об ошибке, которое быстро исчезает, когда я удаляю строку add_form в моем ModelAdmin. Почему это не отображается?

У меня также нет никаких шаблонов администратора в моей локальной директории приложения. Может ли это быть проблемой?

1 Ответ

12 голосов
/ 14 июля 2011

Вам нужно будет добавить поля, которые вы добавили, в свойство add_fieldsets вашего пользовательского класса администратора пользователя.

#example:
add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('username', 'email', 'password1', 'password2')}
        ),
    )

У пользователя был похожий вопрос на днях: Как можноУ меня есть одностадийный (вместо двухступенчатого) процесс регистрации пользователя в Django с электронной почтой? , что также включает создание пользовательской формы для администрирования пользователей.

...