示例#1
0
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)
示例#2
0
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)
示例#3
0
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)
示例#4
0
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" }')
示例#5
0
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)