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.