#encoding=utf-8 from new import classobj from django.contrib import admin from django.contrib.admin.sites import AlreadyRegistered from django.conf import settings from django.db.models.base import ModelBase def _in_module(model,module): try: r = model.__module__.find(module.__name__) if r == -1: return False else: return True except AttributeError: return False def genericAdmin(module): classes = dir(module) admins = [] for c in classes: model = getattr(module,c) if isinstance(model,ModelBase) and _in_module(model,module): c_admin = classobj('%sAdmin'%c,(admin.ModelAdmin,),{}) try: admin.site.register(model,c_admin) admins.append(c_admin) except AlreadyRegistered: pass return admins对于某app的所有models from app import models genericAdmin(models)很方便的给所有的Model类注册admin. 使用标准库的new模块,可以很方便的在运行时创建类,方法,实例 等等,实现很简单的python元编程.同样的,django的 model,form 之类的组件,都可以在运行时根据一些元信息生成. 转载请保留固定链接: https://linuxeye.com/program/1880.html |