Настройка формы администратора в Django, а также использование автообнаружения
Я хочу изменить несколько крошечных деталей встроенного модуля django.contrib.auth
Django. В частности, мне нужна другая форма, которая делает имя пользователя полем электронной почты (и отправляет по электронной почте альтернативный адрес электронной почты. (Я бы предпочел не изменять auth
больше, чем необходимо), простое изменение формы кажется всем необходимым).
Когда я использую autodiscover
с настраиваемым ModelAdmin
для auth
, я заканчиваю конфликт с auth
собственным интерфейсом администратора и получаю "уже зарегистрированную" ошибку.
Похоже, я должен создать свой собственный сайт администратора, перечисляя все мои модели. Это всего лишь 18 классов, но это кажется проблемой СУХОЙ - для каждого изменения требуется как добавление к Model , так и добавление к настраиваемому сайту администратора.
Или я должен написать свою собственную версию "autodiscover
с исключениями", чтобы по существу импортировать все модули admin
, кроме auth
?
Ответы
Ответ 1
Ничего из перечисленного. Просто используйте admin.site.unregister(). Вот как я недавно добавил фильтрацию. Пользователи по is_active в admin ( 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)
Ответ 2
Я думаю, что было бы проще сделать это с помощью настраиваемого внешнего сервера и, следовательно, устранить необходимость в настраиваемом ModelAdmin.
Я сделал что-то подобное с этим фрагментом:
http://www.djangosnippets.org/snippets/74/