Настройка формы администратора в Django с использованием автообнаружения - PullRequest
25 голосов
/ 23 января 2009

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

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

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

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

Ответы [ 2 ]

49 голосов
/ 23 января 2009

Ничего из вышеперечисленного. Просто используйте 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)
2 голосов
/ 23 января 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...