单个ModelForm用于模型字段,仅在时间更新子集

我正在使用Django 1.11 . 我目前正在解决以下问题:

目前我对单个模型有多个ModelForms(不同的形式在其中具有不同的模型字段,例如modelForm1具有fieldA,modelForm2具有fieldB,fieldC和fieldD,......) . 这是因为在模板中我需要将表单放在不同的地方(因为UI) .

我想知道是否有可能只有一个ModelForm与所有字段的联合只会更新它通过request.POST接收的字段,而其他字段保持不变 .

为简单起见,我们假设所有字段都是非必需的,并且没有验证 .

(一种可能的解决方案是以“大”形式封装模板中的所有字段,但这对我不起作用,因为模板中还有更多不同的非模型形式,HTML不能重叠或嵌套 . )

谢谢 .

回答(1)

2 years ago

您可以为一个modelForm实现多个save()方法 . 例如 .

def save(self) #standard
   # do the regular save
   super().save()

def save_fieldset1(self)
   # handle some fields
   super().save()

def save_fieldset2(self)
   # handle some other fields
   super().save()

然后在views.py中调用每个save-method,这取决于你的http-POST的目标位置 .

# ...
if modelForm.is_valid()
   modelForm.save()
   # ...

# ...
if modelForm.is_valid()
   modelForm.save_fieldset1()
   # ...

# ...
if modelForm.is_valid()
   modelForm.save_fieldset2()
   # ...