Automatically register all Django models in Django admin

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 apps
from django.contrib import admin
 
 
def 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:
               continue
           else:
               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.py
 
class 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.

Want to ship better features with AI?
Join my free weekly newsletter.

No spam guaranteed Unsubscribe whenever