def DataDetail(request, app_label, model_name, DataKey): from admin_detail_view import retUserForm, adminForm, doPostAdmin, doCreateAdmin dataModel = GetModel(app_label, model_name) if not dataModel: return NoFound404Response(request) lock = request.GET.get("_lock", None) read_only = (lock == 'ALL') if not read_only: try: if dataModel.Admin.read_only: read_only = True except: pass perm = hasPerm(request.user, dataModel, "change") if not perm and not read_only: if not hasPerm(request.user, dataModel, "browse"): return NoPermissionResponse() read_only = True master = get_model_master(dataModel) if dataModel == User: # 管理员 管理 if request.method == "POST" and not read_only: if not perm: return NoPermissionResponse() return doPostAdmin(request, dataModel, DataKey) else: return doCreateAdmin(request, dataModel, DataKey) if master: try: m_instance = master.rel.to.objects.get(pk=DataKey) except ObjectDoesNotExist: return NoFound404Response(request) try: instance = dataModel.objects.get(**{master.name: m_instance}) except ObjectDoesNotExist: instance = dataModel(**{master.name: m_instance}) else: try: instance = dataModel.objects.get(pk=DataKey) except ObjectDoesNotExist: return NoFound404Response(request) level_type = get_leveltype_byhttpreferer(request) if request.method == "POST" and not read_only: if not perm: return NoPermissionResponse() return DataChangePost( request, dataModel, form_for_instance(instance, post=request.POST, level_type=level_type), instance) if lock: fields = [ field.find("__") and field.split("__")[0] or field for field in dict(request.GET) ] return DataDetailResponse( request, dataModel, form_for_instance(instance, lock_fields=master and [master.name] or (lock and fields or []), read_only=read_only, level_type=level_type), instance.pk, instance)
def DataNewPost(request, dataModel): ''' 新增页提交表单的处理 ''' from admin_detail_view import doPostAdmin,doCreateAdmin from django.db import IntegrityError if dataModel==User: # user 模型的转向处理 return doPostAdmin(request, dataModel, '_new_') f = form_for_model(dataModel, post=request.POST) #---得到模型的表单对象 if hasattr(dataModel.Admin, "form_post"): #---扩展apiAdmin.form_post dataModel.Admin.form_post(request, f, None) if f.is_valid(): #---表单验证 obj=None #---待添加的对象 key=(dataModel._meta.pk.name in f.cleaned_data) and f.cleaned_data[dataModel._meta.pk.name] or None if key: try: obj=dataModel.objects.get(pk=key) if not (fieldVerboseName(dataModel, "status") and obj.status==STATUS_INVALID): f.errors[dataModel._meta.pk.name]=[_(u"复制")] return DataDetailResponse(request, dataModel, f) except ObjectDoesNotExist: print_exc() pass oldEmp=None try: pre_check.send(sender=request, model=dataModel, oldObj=oldEmp) #---触发预处理信号 pre_check f.data_valid(SAVETYPE_NEW) # 重要 api Admin.data_valid 初始数据验证 SAVETYPE_NEW=1 #-----------------Model 扩展api obj=f.save() #预保存 save_for_files(request,obj) key=obj.pk except IntegrityError: #---一般异常的处理 if dataModel.__name__=="Group": info = _(u"角色名称不能重复") else: info =_(u"数据不能重复") f.errors[NON_FIELD_ERRORS]=u'<ul class="errorlist"><li>%s</li></ul>'%info return DataDetailResponse(request, dataModel, f) except Exception, e: #---其他异常的处理 f.errors[NON_FIELD_ERRORS]=u'<ul class="errorlist"><li>%s</li></ul>'%e return DataDetailResponse(request, dataModel, f) if hasattr(dataModel.Admin, "form_after_save"): #---扩展api Admin.form_after_save dataModel.Admin.form_after_save(request, oldEmp, obj) try: #---#---触发处理信号post_check post_check.send(sender=request, oldObj=oldEmp, newObj=obj) except Exception, e: f.errors[NON_FIELD_ERRORS]=u'<ul class="errorlist"><li>%s</li></ul>'%e return DataDetailResponse(request, dataModel, f)
def DataDetail(request, app_label, model_name, DataKey): ''' 通用编辑视图入口 ''' from admin_detail_view import retUserForm,adminForm,doPostAdmin,doCreateAdmin dataModel=GetModel(app_label, model_name) if not dataModel: return NoFound404Response(request) lock=request.GET.get("_lock",None) read_only=(lock=='ALL') if not read_only: try: if dataModel.Admin.read_only: read_only=True except: pass perm=hasPerm(request.user, dataModel, "change") if not perm and not read_only: if not hasPerm(request.user, dataModel, "browse"): return NoPermissionResponse() read_only=True master=get_model_master(dataModel) if dataModel==User: ######### 用户编辑的处理 ########## if request.method=="POST" and not read_only: if not perm: return NoPermissionResponse() return doPostAdmin(request, dataModel, DataKey) else: return doCreateAdmin(request, dataModel, DataKey) if master: try: m_instance=master.rel.to.objects.get(pk=DataKey) except ObjectDoesNotExist: return NoFound404Response(request) try: instance=dataModel.objects.get(**{master.name:m_instance}) except ObjectDoesNotExist: instance=dataModel(**{master.name: m_instance}) else: try: instance=dataModel.objects.get(pk=DataKey) except ObjectDoesNotExist: return NoFound404Response(request) if request.method=="POST" and not read_only: if not perm: return NoPermissionResponse() return DataChangePost(request, dataModel, form_for_instance(instance, post=request.POST), instance) if lock: fields=[field.find("__") and field.split("__")[0] or field for field in dict(request.GET)] return DataDetailResponse(request, dataModel, form_for_instance(instance, lock_fields=master and [master.name] or (lock and fields or []), read_only=read_only), instance.pk, instance)
def DataNewPost(request, dataModel): from admin_detail_view import doPostAdmin, doCreateAdmin from django.db import IntegrityError if dataModel == User: return doPostAdmin(request, dataModel, '_new_') f = form_for_model(dataModel, post=request.POST) if hasattr(dataModel.Admin, "form_post"): dataModel.Admin.form_post(request, f, None) if dataModel.__name__ == "Group": if len(request.POST.get("permissions", "")) == 0: info = _(u"请为该角色勾选权限!") f.errors[ NON_FIELD_ERRORS] = u'<ul class="errorlist"><li>%s</li></ul>' % info return DataDetailResponse(request, dataModel, f) #print "//////////////////////",dir(request.POST) #print "//////////////////////",type(request.POST.get("permissions","")),"//",request.POST.get("permissions") if f.is_valid(): obj = None key = (dataModel._meta.pk.name in f.cleaned_data ) and f.cleaned_data[dataModel._meta.pk.name] or None if key: try: obj = dataModel.objects.get(pk=key) if not (fieldVerboseName(dataModel, "status") and obj.status == STATUS_INVALID): f.errors[dataModel._meta.pk.name] = [_(u"复制")] return DataDetailResponse(request, dataModel, f) except ObjectDoesNotExist: print_exc() pass oldEmp = None # try: # oldEmp=dataModel.objByID(emp.id) # except: pass # try: pre_check.send(sender=request, model=dataModel, oldObj=oldEmp) f.data_valid(SAVETYPE_NEW) #进行业务逻辑处理 #print "///////////before save=",dir(f) obj = f.save() save_for_files(request, obj) key = obj.pk except IntegrityError: if dataModel.__name__ == "Group": info = _(u"角色名称不能重复") else: info = _(u"数据不能重复") f.errors[ NON_FIELD_ERRORS] = u'<ul class="errorlist"><li>%s</li></ul>' % info return DataDetailResponse(request, dataModel, f) except Exception, e: #通常是不满足数据库的唯一性约束导致保存失败 f.errors[ NON_FIELD_ERRORS] = u'<ul class="errorlist"><li>%s</li></ul>' % e #print "data_edit,f.errors[NON_FIELD_ERRORS]=",f.errors[NON_FIELD_ERRORS] return DataDetailResponse(request, dataModel, f) if hasattr(dataModel.Admin, "form_after_save"): #print"====form_after_save" dataModel.Admin.form_after_save(request, oldEmp, obj) try: #print"====oldObj",oldEmp,"====newObj",obj.permissions_set post_check.send(sender=request, oldObj=oldEmp, newObj=obj) except: print_exc() popup = request.GET.get("_popup", "") if popup: the_add_object = unicode(obj) return HttpResponse( u'<script type="text/javascript">\nopener.dismissAddAnotherPopup(window, "%s", "%s");\n</script>' % (key, the_add_object)) return HttpResponse('{ Info:"OK" }')
def DataNewPost(request, dataModel): ''' 新增页提交表单的处理 ''' from admin_detail_view import doPostAdmin, doCreateAdmin from django.db import IntegrityError if dataModel == User: # user 模型的转向处理 return doPostAdmin(request, dataModel, '_new_') f = form_for_model(dataModel, post=request.POST) #---得到模型的表单对象 if hasattr(dataModel.Admin, "form_post"): #---扩展apiAdmin.form_post dataModel.Admin.form_post(request, f, None) if f.is_valid(): #---表单验证 obj = None #---待添加的对象 key = (dataModel._meta.pk.name in f.cleaned_data ) and f.cleaned_data[dataModel._meta.pk.name] or None if key: try: obj = dataModel.objects.get(pk=key) if not (fieldVerboseName(dataModel, "status") and obj.status == STATUS_INVALID): f.errors[dataModel._meta.pk.name] = [_(u"复制")] return DataDetailResponse(request, dataModel, f) except ObjectDoesNotExist: print_exc() pass oldEmp = None try: pre_check.send(sender=request, model=dataModel, oldObj=oldEmp) #---触发预处理信号 pre_check f.data_valid( SAVETYPE_NEW ) # 重要 api Admin.data_valid 初始数据验证 SAVETYPE_NEW=1 #-----------------Model 扩展api obj = f.save() #预保存 save_for_files(request, obj) key = obj.pk except IntegrityError: #---一般异常的处理 if dataModel.__name__ == "Group": info = _(u"角色名称不能重复") else: info = _(u"数据不能重复") f.errors[ NON_FIELD_ERRORS] = u'<ul class="errorlist"><li>%s</li></ul>' % info return DataDetailResponse(request, dataModel, f) except Exception, e: #---其他异常的处理 f.errors[ NON_FIELD_ERRORS] = u'<ul class="errorlist"><li>%s</li></ul>' % e return DataDetailResponse(request, dataModel, f) if hasattr(dataModel.Admin, "form_after_save"): #---扩展api Admin.form_after_save dataModel.Admin.form_after_save(request, oldEmp, obj) try: #---#---触发处理信号post_check post_check.send(sender=request, oldObj=oldEmp, newObj=obj) except Exception, e: f.errors[ NON_FIELD_ERRORS] = u'<ul class="errorlist"><li>%s</li></ul>' % e return DataDetailResponse(request, dataModel, f)