Django (1.10) override AdminSite
from django.contrib.auth.models import Group, User from django.contrib.auth.admin import GroupAdmin, UserAdmin from django.contrib.admin import AdminSite from django.contrib import admin from .models import MyModel #This is my app's model # Custom admin site class MyAdminSite(AdminSite): site_header = 'My Project Title' site_title = 'My Project Title Administration' index_title = 'My Project Title Administration' # You can add on more attributes if you need # Check out https://docs.djangoproject.com/en/1.11/ref/contrib/admin/#adminsite-objects # Create admin_site object from MyAdminSite admin_site = MyAdminSite(name='my_project_admin') # Register the models class MyModelAdmin(admin.ModelAdmin): list_display = ('id', 'description') admin_site.register(MyModel, MyModelAdmin) # Create and register all of your models # .... # This is the default Django Contrib Admin user / group object # Add this if you need to edit the users / groups in your custom admin admin_site.register(Group, GroupAdmin) admin_site.register(User, UserAdmin)
from django.conf.urls import url from django.contrib import admin from myapp.admin import admin_site ##! Important..Import your object (admin_site) instead of your class (MyAdminSite) urlpatterns = [ url(r'^admin/', admin_site.urls), #Now all /admin/ will go to our custom admin ]
I didn't found the solution to my problem, but I have made a workaround.
First we need to create module in our app (e.g. admin.py) and then extend class AdminSite:
from django.contrib.admin import AdminSite class MyAdminSite(AdminSite): ...
Then on bottom of module we need to create instance of our MyAdminSite and register built-in models from Django:
site = MyAdminSite() site.register(Group, GroupAdmin) site.register(User, UserAdmin)
from django.contrib.auth.models import Group, User from django.contrib.auth.admin import GroupAdmin, UserAdmin
In our site url module we need to override original site object:
from .admin import site admin.site = site admin.autodiscover() ... url(r'^admin/', admin.site.urls) ...
Last change we need to do is register our models. One thing we need to remeber is that we can't use register as decorator like that:
@admin.register(MyModel) class MyModelAdmin(admin.ModelAdmin): ...
@admin.site.register(MyModel) class MyModelAdmin(admin.ModelAdmin): ...
We need to define our ModelAdmin class and then call register on our MyAdminSite object:
class MyModelAdmin(admin.ModelAdmin): ... admin.site.register(MyModel, MyModelAdmin)
This is the only solution that is working for me.