def _branchAdd(requestData, user): ''' 增加一个选项的具体处理过程 ''' # 检查是否有提供Question keys = requestData.keys() if 'question' not in keys: return packageResult(RESULT_CODE.ERROR, RESULT_MESSAGE.NO_ID) questionIdSigned = requestData['question'] # 对id进行数字签名的检查 try: signer = Signer() questionId = signer.unsign(questionIdSigned) except BadSignature: # 篡改发现处理 return packageResult(RESULT_CODE.ERROR, RESULT_MESSAGE.BAD_SAGNATURE) # 尝试读取question信息 questionList = Question.objects.filter(id=questionId) if len(questionList) == 0: return packageResult(RESULT_CODE.ERROR, RESULT_MESSAGE.OBJECT_NOT_EXIST) question = questionList[0] # 检查是否有权限做新增 if question.createBy.id != user.id: return packageResult(RESULT_CODE.ERROR, RESULT_MESSAGE.NO_PRIVILEGE) # 遍历Branch的所有Field,并尝试在request中寻找是否提供了对应的数据 data = {} for field in getModelFields(Branch): # 跳过系统自动增加的字段 if field.auto_created: continue # 读取request数据 value = requestData.get(field.name, None) # 特殊处理json的Boolean型的变量 if type(field) == BooleanField: value = jsonBoolean2Python(value) # 对创建人和修改人的信息进行特殊处理 if field.name in [USER_CREATE_BY_FIELD_NAME, USER_MODIFY_BY_FIELD_NAME]: value = user # 对question字段进行特殊处理,提交的数据是id转化为对象 if field.name == 'question': value = question # 对ord 字段进行特殊处理,取当前的问题数量加1 if field.name == 'ord': # 这里锁定了question所有branch对象 value = question.branch_set.select_for_update().count() # 如果调用者没有显示执行字段值为空,则不增加到data中去,让模型的默认值发挥作用 # 字段代码不能早于对createBy和modifyBy的处理 if value is None and field.name not in keys: continue # 将校验的数据添加到data,准备为创建数据库用 data[field.name] = value branch = Branch(**data) # 进行数据校验 try: branch.full_clean() except ValidationError as exception: return packageResult( RESULT_CODE.ERROR, RESULT_MESSAGE.VALIDATION_ERROR, {'validationMessage': exception.message_dict}) # 写到数据库 branch.save() # 返回成功 return packageResult(RESULT_CODE.SUCCESS, RESULT_MESSAGE.SUCCESS, {'branchId': branch.id})