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

时间:2017-08-09 10:43:45

标签: django django-forms

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

目前,我为单个模型提供了多个ModelForms(不同的表单中有不同的模型字段,例如modelForm1有fieldA,modelForm2有fieldB,fieldC和fieldD,......)。这是因为在模板中我需要将表单放在不同的位置(因为UI)。

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以为一个modelForm实现多个save()方法。 E.g。

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()
   # ...