Настройка формы администратора в Django с использованием автообнаружения

Я хочу изменить несколько мелких деталей встроенного в Django django.contrib.auth модуль. В частности, я хочу другую форму, которая делает имя пользователя полем электронной почты (и отправляет по электронной почте альтернативный адрес электронной почты. (Я бы не хотел изменять auth больше, чем нужно - все, что нужно, - это простое изменение формы.)

Когда я использую autodiscover с настроенным ModelAdmin за auth Я конфликтую с auth собственный админ интерфейс и выдает "уже зарегистрированную" ошибку.

Похоже, я должен создать свой собственный сайт администратора, перечисляя все мои модели. Это всего 18 классов, но это похоже на проблему СУХОГО - каждое изменение требует как добавления в модель, так и добавления на настроенный сайт администратора.

Или я должен написать свою собственную версию " autodiscover с исключением "по существу импортировать все admin кроме модулей auth?

2 ответа

Решение

Ни один из вышеперечисленных. Просто используйте admin.site.unregister(). Вот как я недавно добавил фильтрацию Users по is_active в админке (nb is_active фильтрация теперь по умолчанию в модели User в ядре Django; все еще работает здесь в качестве примера), все DRY, как может быть:

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

class MyUserAdmin(UserAdmin):
    list_filter = UserAdmin.list_filter + ('is_active',)

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

Я думаю, что это может быть проще сделать с помощью пользовательского аутентификационного бэкэнда и, таким образом, устранить необходимость в настраиваемом ModelAdmin.

Я сделал нечто похожее с этим фрагментом: http://www.djangosnippets.org/snippets/74/

Другие вопросы по тегам