Пользовательская модель 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) Истинно, если у пользователя есть разрешение на доступ к моделям в данном приложении.

Другие вопросы по тегам