背景简化如下:
Model 部分:Model 名为 Task,Task 中有一个 name 字段,该字段唯一 unique=True,
Form 部分:根据 Task 的 Model,构造了一个 ModelForm TaskForm
View 部分,使用 CreateView,UpdateView 对此 Task 进行增加,修改。
问题:在 UpdateView 中,因为要对前端传过来的数值进行一些加工后保存,所以重写了 form_valid 方法。在该方法中,使用 task = form.save(commit=False) 的时候,会直接触发 name 字段的唯一性验证。直接就报错跳出了。
另外一个问题。假如我去掉 unique 验证,此时 task = form.save(commit=False)获取的 task,是不包含 id 的。我选择 save 操作,数据库里会多出一条数据。而不是在之前记录上修改的。 这里如何处理?还是需要手动指定 ID?
django 新手。求指教。多谢。
1
asilin 2019-06-26 17:51:49 +08:00
不需要 commit=False,在 save() 之前,你可以通过 form.instance 来获取 /修改表单的数据,处理完逻辑之后再 save() 即可。
具体可以参阅: https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/#s-overriding-clean-on-a-modelformset |