LinuxEye - Linux系统教程

LinuxEye - Linux系统教程

当前位置: 主页 > 脚本编程 >

使用new模块自动生成django的admin

时间:2013-08-05 10:48来源:opython.com/?p=148 编辑:opython 点击:
Django的admin模块有时候用起来挺方便.但是大多时候,也仅仅做一些增删改查.表一多,写很多admin类让人十分厌烦.后来写了个小程序,在运行时自动组装admin类. #encoding=utf-8from new import classob
Django的admin模块有时候用起来挺方便.但是大多时候,也仅仅做一些增删改查.表一多,写很多admin类让人十分厌烦.后来写了个小程序,在运行时自动组装admin类.
#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

------分隔线----------------------------
标签:Pythondjango
栏目列表
推荐内容