如何动态更新模型的修改字段
Posted
技术标签:
【中文标题】如何动态更新模型的修改字段【英文标题】:How to dynamically update the modified fields of a Model 【发布时间】:2022-01-23 12:34:02 【问题描述】:假设我有模型Project
。模型Project
有 > 100 个字段。
我可以使用表单从前端创建新的Projects
。
当我想在后端编辑/更新 Project
的某些字段时,我一直在做这样的事情(截断):
def edit_project(request):
if request.method == 'POST':
project_to_edit = Project.objects.get(pk=request.POST['project_id'])
project_to_edit.description = request.POST['description']
project_to_edit.name = request.POST['name']
#repeat the same process for each field...(>50)
project_to_edit.save()
return redirect('project_page/')
return redirect('index')
问题在于不断向Projects
模型添加新字段。
是否有一种动态/pythonic 的方式来更新模型中的每个字段,而不必为每个字段“手动”执行并保存代码行?
【问题讨论】:
我认为 djangosignal
会帮助你。
@sunilghimire 你能举个例子吗?
【参考方案1】:
您可以像这样动态更新字段:
def edit_project(request):
if request.method == 'POST':
project_to_edit = Project.objects.get(pk=request.POST['project_id'])
for field in self.fields:
project_to_edit.description = request.POST[field]
project_to_edit.name = request.POST[field]
#repeat the same process for each field...(>50)
project_to_edit.save()
return redirect('project_page/')
return redirect('index')
附:您应该使用 form.cleaned_data 来访问您的表单数据,而不是直接访问提交的数据。 Modelform 将解决您的问题https://docs.djangoproject.com/en/4.0/topics/forms/modelforms/
【讨论】:
我认为您的代码不正确。project_to_edit.name
应该是 project_to_edit.field
,不是吗?以上是关于如何动态更新模型的修改字段的主要内容,如果未能解决你的问题,请参考以下文章
动态表单 - 如何使用反应钩子更新“onChange”事件中多个表单字段的值?