Automatically register all Django models in Django admin
Published: June 30, 2023
Manually creating an Django admin entry for every new model is a waste of time. Let's do it automatically
Create function to register all models
- We call this function after registering any custom admin classes.
- uses Django's inbuilt get_models() function to register every model in your project register
- ignore the LogEntry, ContentType, Session, and Token (inbuilt django models)
from django.apps import appsfrom django.contrib import admindef register_all_app_models():"""Register any unregistered app models. We call this function after registering any custom admin classes."""models_to_ignore = ['admin.LogEntry','contenttypes.ContentType','sessions.Session','authtoken.TokenProxy','authtoken.Token', # We automatically register the authtoken app models.]for model in apps.get_models():try:if model._meta.label in models_to_ignore:continueelse:class modelAdmin(admin.ModelAdmin):list_display = [field.name for field in model._meta.fields]admin.site.register(model, modelAdmin)except admin.sites.AlreadyRegistered:pass
Add it to your admin.py file
- Register the generated models with admin.site.register().
- We handle the AlreadyRegistered exception by passing it -ignoring any models that are already registered.
# admin.pyclass CreationAdmin(admin.ModelAdmin): # Example specific model admin class.list_display = ["id", "diffuser", "key", "hr_key", "created_at", "image_download_count"]list_filter = ["diffuser"]admin.site.register(models.Creation, CreationAdmin)register_all_app_models() # Call the function after registering any specific model admin class.