开发者

Remove default apps from Django-admin

By default, in Django-admin there is Users, Groups, and Sites apps. How can I remove Groups and Sites?

I tried to remove admin.autodiscover() from roo开发者_JAVA技巧t urls. Then, when I added something like admin.site.register(User, UserAdmin) somewhere in my app models I got an AlreadyRegistered exception (this is fairly right - models users already registered in django.contrib.auth).


In an admin.py you know will definitely be loaded, try:

admin.site.unregister(User)
admin.site.unregister(Group)
admin.site.unregister(Site)


In addition to the above double check your ordering of "INSTALLED_APPS" in "settings.py"

INSTALLED_APPS = [
    # django apps first
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # custom apps below
    'my_app'
]

Otherwise it will cause an error. See here: Issue with Django admin registering an inline user profile admin


To get rid of Users and Groups I had to do in admin.py:

from django.contrib import admin
# Need to import this since auth models get registered on import.
import django.contrib.auth.admin
import django.contrib.auth.models
from django.contrib import auth

admin.site.unregister(auth.models.User)
admin.site.unregister(auth.models.Group)


Loop through all apps, and unregister any models they have registered.

from django.apps import apps


# De-register all models from other apps
for app_config in apps.get_app_configs():
    for model in app_config.get_models():
        if admin.site.is_registered(model):
            admin.site.unregister(model)


# Register only those models you want
...


If you got:

django.contrib.admin.sites.NotRegistered: The model Group is not registered

Then make sure that your INSTALLED_APPS in proper order like this:

enter code hereINSTALLED_APPS = (
# [1] Django apps
'django.contrib.auth',
...

# [2] your custom apps
'anyproject.anytuff',
)


from django.apps import apps

for model in apps.get_models():
    if model.__name__ and admin.site.is_registered(model):
        admin.site.unregister(model)

this will unregister all models depending upon the position of app where this code is placed and it's order inside INSTALLED_APPS so make sure the apps you want in your admin are placed after the app in which this code resides.

Remove default apps from Django-admin

For Example: if this code is placed inside users app, it will unregister all models before users and all models after users can be registered.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜