Created
October 7, 2019 06:26
-
-
Save ebongzzang/4cffd972505c02d530e7f420b03785ef to your computer and use it in GitHub Desktop.
django-admin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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