表名,字段,新的值都是前端传来的。
首先通过表名变量获取model,使用get_model方法
接着通过id获取要更新的记录obj
然后使用setattr(obj, fieldname,fieldvalue)
函数给记录更新字段值。
这样就避免了后端写一些重复的更新字段语句。
上代码
#目前django是1.8版本,1.9以后导入get_model方法有更改
try:
from django.apps import apps
get_model=apps.get_model
except ImportError:
from django.db.models.loading import get_model
def editTableInfo(request):
if request.method =='POST':
try:
editType = request.POST.get('editType', None)
newValue = request.POST.get('newValue', None)
objId = request.POST.get('objId', None)
tableName = request.POST.get('tableName',None)
tableModel = get_model('inzhua_main', tableName)
obj = tableModel.objects.get(id=objId)
result = dynamicUpdateObjFields(obj=obj, fieldName=editType,
fieldValue=newValue)
return HttpResponse(result)
except Exception as e:
print(e)
return HttpResponse('网络出错!')
def dynamicUpdateObjFields(obj=None,fieldName=None,fieldValue=None):
print obj,fieldName,fieldValue
try:
if obj and fieldName and fieldValue:
setattr(obj,fieldName,fieldValue)
obj.save()
return '修改成功'
except Exception as e:
print e
return '修改失败'
网友评论