Skip to content

Instantly share code, notes, and snippets.

@ebongzzang
Created October 7, 2019 06:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ebongzzang/4cffd972505c02d530e7f420b03785ef to your computer and use it in GitHub Desktop.
Save ebongzzang/4cffd972505c02d530e7f420b03785ef to your computer and use it in GitHub Desktop.
django-admin
# Register your models here.
import inspect
import sys
from cytoolz import *
from django.contrib import admin
from guardian.admin import GuardedModelAdmin
from .models import *
CONTAINS_VIEW = [
User,
ZipInfos, ZipTypeInfos,
Sales,
]
_models = [
sys.modules["olim_admin.models"],
]
django_models_within_modules = concat(map(lambda x: inspect.getmembers(x, inspect.isclass), _models))
modelClasses = [x[1] for x in django_models_within_modules if models.Model in x[1].__bases__]
for modelClass in modelClasses:
if modelClass in CONTAINS_VIEW:
admin.site.register(modelClass)
def replace_admin_model(*target_models: models.Model, site=None):
from django.contrib.admin import ModelAdmin
from django.contrib.admin.sites import site as default_site, AdminSite
def _model_admin_wrapper(admin_class):
if not target_models:
raise ValueError('At least one model must be passed to register.')
admin_site = site or default_site
if not isinstance(admin_site, AdminSite):
raise ValueError('site must subclass AdminSite')
if not issubclass(admin_class, ModelAdmin):
raise ValueError('Wrapped class must subclass ModelAdmin.')
try:
admin_site.unregister(target_models)
except:
pass
admin_site.register(target_models, admin_class=admin_class)
return admin_class
return _model_admin_wrapper
@replace_admin_model(User)
class UserAdmin(GuardedModelAdmin):
list_per_page = 20
@replace_admin_model(ZipInfos)
class ZipInfoAdmin(GuardedModelAdmin):
list_display = [field.name for field in ZipInfos._meta.get_fields(include_parents=False)][1:]
@replace_admin_model(ZipTypeInfos)
class ZipTypeInfosAdmin(GuardedModelAdmin):
list_display = [field.name for field in ZipTypeInfos._meta.get_fields(include_parents=False)][1:]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment