Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 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/