Пользовательская модель Django 1.5 плюс приложение с прерываниями admin.autodiscover()
У меня есть пользовательская модель (на самом деле она называется User
поскольку я не видел необходимости называть его иначе) в моем проекте Django 1.5c1 (в настоящее время он работает на последней версии из ветки Django 1.5 на github). AUTH_USER_MODEL
определяется в моих настройках правильно, поэтому auth
Модуль работает правильно, и я могу войти и т. д. в порядке.
Однако, с включенным пользовательским модулем пользователя, сайт администратора не работает. Когда я добавлю admin.autodiscover()
к моему urls.py
, каждая страница на сайте (не только страницы администратора) создает NotRegistered
исключение и говорит The model User is not registered
, Трассировка показывает, что admin.autodiscover()
пытается позвонить admin.site.unregister(User)
по-видимому, прежде чем он зарегистрировал эту модель.
Я попытался переименовать мою модель пользователя в нечто иное, чем User
, но это не сработало. Я также пытался создать свой собственный admin.py
для этого приложения, а затем я попытался вручную зарегистрировать свой пользовательский User
модель с кастомом UserAdmin
модель указана в admin.py
до admin.autodiscover()
побежал, но это на самом деле вызвало отдельное исключение, сказав, что User
был уже зарегистрирован.
Что я должен попробовать дальше, чтобы получить admin.autodiscover()
за работой?
2 ответа
Я создал новый пустой проект с пользовательской моделью и попытался воссоздать ситуацию, что привело к диагностике: мы добавили django-usertools
пакет к проекту, который не был обновлен для Django 1.5 и явно конфликтует с пользовательскими моделями. Удаление этого пакета из списка установленных приложений в настройках решило проблему.
Похоже, вам нужно перепрыгнуть через несколько дополнительных обручей, если вы хотите, чтобы ваша пользовательская модель пользователя работала с администратором. Из документации:
... ваша модель User должна определять некоторые дополнительные атрибуты и методы. Эти методы позволяют администратору контролировать доступ пользователя к содержимому администратора:
class models.CustomUser
is_staff
Истинно, если пользователю разрешено иметь доступ к сайту администратора.
is_active
Истинно, если учетная запись пользователя активна.
has_perm(perm, obj=None)
Истинно, если у пользователя есть указанное разрешение.
has_module_perms(app_label)
Истинно, если у пользователя есть разрешение на доступ к моделям в данном приложении.