Настройка формы администратора в 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/