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

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,不是吗?

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

我如何执行查询集选择字段的动态更新?

动态表单 - 如何使用反应钩子更新“onChange”事件中多个表单字段的值?

如何使用 MVC 模型动态过滤 javafx 中的列表视图控件,同时以多种方式更新? [关闭]

Django Admin中的动态只读字段

如何动态更新ModelForm的初始值?

C# 如何动态更新DataGridView