Django (1.10) override AdminSite

前端 未结 3 1798
你的背包
你的背包 2021-01-02 04:25

I\'ve tried to override AdminSite class with my own custom class. I followed tutorial from django\'s documentation: https://docs.djangoproject.com/en/1.10/ref/contrib/admin

3条回答
  •  执笔经年
    2021-01-02 04:56

    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)
    

    Necessary imports:

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

    or:

    @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.

提交回复
热议问题