I want to modify a few tiny details of Django's built-in django.contrib.auth
module. Specifically, I want a different form that makes username an email field (and email an alternate email address. (I'd rather not modify auth
any more than necessary -- a simple form change seems to be all that's needed.)
When I use autodiscover
with a customized ModelAdmin
for auth
I wind up conflicting with auth
's own admin interface and get an "already registered" error.
It looks like I have to create my own admin site, enumerating all of my Models. It's only 18 classes, but it seems like a DRY problem -- every change requires both adding to the Model and adding to the customized admin site.
Or, should I write my own version of "autodiscover
with exclusions" to essentially import all the admin
modules except auth
?
None of the above. Just use admin.site.unregister(). Here's how I recently added filtering Users on is_active in the admin (n.b. is_active filtering is now on the User model by default in Django core; still works here as an example), all DRY as can be:
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)