def buttonItem(request, operation): #根据一项操作产生操作菜单项!!! if hasPerm(request.user, request.model, operation): return u'<li><a href="%s/data/%s/">%s</a></li>'%(iclock_url_rel, model.__name__, model._meta.verbose_name) else: return u'<li>'+model._meta.verbose_name+'</li>'
def getUsrCreateFrameOptions(dataModel,request): ''' return options , actions ''' from urls import get_model_data_url import base lng=get_language() model_name=dataModel.__name__ #**********options cache******** cache_key=u"%s_%s_%s"%(lng,model_name,'options') options=cache.get(cache_key) if not options: options={ #"canEdit": (not hasattr(dataModel.Admin, 'read_only')) or not dataModel.Admin.read_only, "key_field":dataModel._meta.pk.name, "title":u"%s"%dataModel._meta.verbose_name, "addition_fields":[], "addition_columns":[], "exception_fields":[], "model": model_name, #"model_url":get_model_data_url(dataModel), "app_label": dataModel._meta.app_label, "children_models": {}, "detail_model":hasattr(dataModel.Admin, "detail_model") and [ m for m in dataModel.Admin.detail_model] or [], "parent_models":dict([(f.rel.to.__name__,f.name) for f in dataModel._meta.fields if isinstance(f,models.fields.related.ForeignKey)]), } if options["detail_model"]: all_related_objects = dataModel._meta.get_all_related_objects() for r in all_related_objects: child_fk_field = hasattr(r.model.Admin, 'child_fk_field') and r.model.Admin.child_fk_field or ''#只需要从表中存在多个对于主表的外键时配置。不配置取默认 if child_fk_field and r.field.name != child_fk_field:#去掉不合要求的多余的对象(如video_linkageio__id) all_related_objects.remove(r) options["children_models"] = dict([(r.name, [r.model._meta.app_label, r.model.__name__,\ u"%s"%r.model._meta.verbose_name, r.field.name\ ]) for r in all_related_objects\ ]) hide_fields=hasattr(dataModel.Admin, 'hide_fields') and list(dataModel.Admin.hide_fields) or[] if hide_fields: options["disable_cols"]=hide_fields if hasattr(dataModel.Admin,"sort_fields"): options["sort_fields"]=dataModel.Admin.sort_fields if hasattr(dataModel.Admin,"photo_path"): options["photo_path"]=dataModel.Admin.photo_path if hasattr(dataModel.Admin,"photo_path_tran"): options["photo_path_tran"]=dataModel.Admin.photo_path_tran if hasattr(dataModel.Admin,"layout_types"): options["layout_types"]=dataModel.Admin.layout_types cache.set(cache_key,options,60*60*24*7) #*******actions cache******* usr = threadlocals.get_current_user() cache_key = u"%s_%s_%s_%s"%(lng,usr.username,model_name,"actions") actions = cache.get(cache_key) if not actions: if hasattr(dataModel,"get_all_operation_js"): actions=dataModel.get_all_operation_js(request.user) elif hasattr(dataModel.Admin, "read_only") and not dataModel.Admin.read_only: from dbapp.data_utils import hasPerm actions={} if hasPerm(request.user,dataModel,"add"): actions["_add"]={ "verbose_name":u"%(name)s"%{"name":_(u"新增")}, "help_text":u"%(name)s"%{"name":_(u"新增记录")}, "confirm":"", "params":0, "for_model":True, "only_one":False, } if ( hasPerm(request.user,dataModel,"delete") and model_name=="User" ) \ or ( hasPerm(request.user,dataModel,"groupdel") and model_name=="Group"): actions["_delete"]={ "verbose_name":u"%(name)s"%{"name":_(u"删除")}, "help_text":u"%(name)s"%{"name":_(u"删除选定记录")}, "confirm":"are you sure?", "params":0, "for_model":False, "only_one":False, "for_select":True } if hasPerm(request.user,dataModel,"change"): actions["_change"]={ "verbose_name":u"%(name)s"%{"name":_(u"修改")}, "help_text": u"%(name)s"%{"name":_(u"修改选定记录")}, "params":0, "for_model":False, "only_one":True, "for_select":True } actions =smart_str(simplejson.dumps(actions)) cache.set(cache_key,actions,60*60*24*7) return (simplejson.dumps(options),actions or '{"op":"null"}')
def reqHasPerm(request, operation): #判断一个当前请求的数据模型表是否有某个权限 return hasPerm(request.user, request.model, operation)
def getUsrCreateFrameOptions(dataModel, request): ''' return options , actions ''' from urls import get_model_data_url import base lng = get_language() model_name = dataModel.__name__ #**********options cache******** cache_key = u"%s_%s_%s" % (lng, model_name, 'options') options = cache.get(cache_key) if not options: options = { #"canEdit": (not hasattr(dataModel.Admin, 'read_only')) or not dataModel.Admin.read_only, "key_field": dataModel._meta.pk.name, "title": u"%s" % dataModel._meta.verbose_name, "addition_fields": [], "addition_columns": [], "exception_fields": [], "model": model_name, #"model_url":get_model_data_url(dataModel), "app_label": dataModel._meta.app_label, "children_models": {}, "detail_model": hasattr(dataModel.Admin, "detail_model") and [m for m in dataModel.Admin.detail_model] or [], "parent_models": dict([(f.rel.to.__name__, f.name) for f in dataModel._meta.fields if isinstance(f, models.fields.related.ForeignKey)]), } if options["detail_model"]: all_related_objects = dataModel._meta.get_all_related_objects() for r in all_related_objects: child_fk_field = hasattr( r.model.Admin, 'child_fk_field' ) and r.model.Admin.child_fk_field or '' #只需要从表中存在多个对于主表的外键时配置。不配置取默认 if child_fk_field and r.field.name != child_fk_field: #去掉不合要求的多余的对象(如video_linkageio__id) all_related_objects.remove(r) options["children_models"] = dict([(r.name, [r.model._meta.app_label, r.model.__name__,\ u"%s"%r.model._meta.verbose_name, r.field.name\ ]) for r in all_related_objects\ ]) hide_fields = hasattr(dataModel.Admin, 'hide_fields') and list( dataModel.Admin.hide_fields) or [] if hide_fields: options["disable_cols"] = hide_fields if hasattr(dataModel.Admin, "sort_fields"): options["sort_fields"] = dataModel.Admin.sort_fields if hasattr(dataModel.Admin, "photo_path"): options["photo_path"] = dataModel.Admin.photo_path if hasattr(dataModel.Admin, "photo_path_tran"): options["photo_path_tran"] = dataModel.Admin.photo_path_tran if hasattr(dataModel.Admin, "layout_types"): options["layout_types"] = dataModel.Admin.layout_types cache.set(cache_key, options, 60 * 60 * 24 * 7) #*******actions cache******* usr = threadlocals.get_current_user() cache_key = u"%s_%s_%s_%s" % (lng, usr.username, model_name, "actions") actions = cache.get(cache_key) if not actions: if hasattr(dataModel, "get_all_operation_js"): actions = dataModel.get_all_operation_js(request.user) elif hasattr(dataModel.Admin, "read_only") and not dataModel.Admin.read_only: from dbapp.data_utils import hasPerm actions = {} if hasPerm(request.user, dataModel, "add"): actions["_add"] = { "verbose_name": u"%(name)s" % { "name": _(u"新增") }, "help_text": u"%(name)s" % { "name": _(u"新增记录") }, "confirm": "", "params": 0, "for_model": True, "only_one": False, } if ( hasPerm(request.user,dataModel,"delete") and model_name=="User" ) \ or ( hasPerm(request.user,dataModel,"groupdel") and model_name=="Group"): actions["_delete"] = { "verbose_name": u"%(name)s" % { "name": _(u"删除") }, "help_text": u"%(name)s" % { "name": _(u"删除选定记录") }, "confirm": "are you sure?", "params": 0, "for_model": False, "only_one": False, "for_select": True } if hasPerm(request.user, dataModel, "change"): actions["_change"] = { "verbose_name": u"%(name)s" % { "name": _(u"修改") }, "help_text": u"%(name)s" % { "name": _(u"修改选定记录") }, "params": 0, "for_model": False, "only_one": True, "for_select": True } actions = smart_str(simplejson.dumps(actions)) cache.set(cache_key, actions, 60 * 60 * 24 * 7) return (simplejson.dumps(options), actions or '{"op":"null"}')