如何动态更新模型的修改字段

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 的方式来更新模型中的每个字段,而不必为每个字段“手动”执行并保存代码行?

【问题讨论】:

我认为 django signal 会帮助你。 @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,不是吗?

以上是关于如何动态更新模型的修改字段的主要内容,如果未能解决你的问题,请参考以下文章