Django (1.10) Overrides AdminSite

I tried to override the AdminSite class with my own custom class. I followed the django documentation tutorial: https://docs.djangoproject.com/en/1.10/ref/contrib/admin/#customizing-adminsite , but that didn't work. To be specific, I would like to redefine the original AdminSite with my own class, and not just add another admin site to my project.

I created my own class MyAdminSite, which inherits from the class

from django.contrib.admin import AdminSite


class MyAdminSite(AdminSite):
    pass

Then in my urls.py application added:

from django.conf.urls import url, include
import django.contrib.admin as admin
from .admin_site import MyAdminSite

admin.site = MyAdminSite()
admin.autodiscover()


urlpatterns = [
    url(r'^', admin.site.urls),
]

This seemed to work, but admin models are being registered in the AdminSite insted from MyAdminSite.

I tried three ways to register models on my user site:

@admin.register(Model)
class ModelAdmin(model.AdminModel):
...

Thus, the models are registered in the original AdminSite.

The second way:

@admin.site.register(Model):
class ModelAdmin(model.AdminModel):
...

. ModelAdmin .

:

class ModelAdmin(model.AdminModel):
...
admin.site.register(Model, ModelAdmin)

, - , Django admin ( ).

admin.site MyAdminSite?

+4
2

, .

(, admin.py), AdminSite:

from django.contrib.admin import AdminSite

class MyAdminSite(AdminSite):
    ...

MyAdminSite 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

url :

from .admin import site

admin.site = site
admin.autodiscover()
...
url(r'^admin/', admin.site.urls)
...

, , . , :

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    ...

@admin.site.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    ...

ModelAdmin, MyAdminSite:

class MyModelAdmin(admin.ModelAdmin):
    ...
admin.site.register(MyModel, MyModelAdmin

, .

+1

myapp/admin.py:

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 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)

myproject/urls.py

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
]
+3

Source: https://habr.com/ru/post/1658012/


All Articles