尝试使用自定义表单保存一堆对象:
class CustomForm(forms.ModelForm):
class Meta:
model = Widget
complexify = models.BooleanField()
当选中complexify时,我需要对widget对象进行一些复杂的操作。
我做不到:
for object in formset.save(commit=False):
...
因为它没有complexify
标志。
通过每种形式似乎是错误的方式:
for form in formset.forms:
...
因为它包含额外(空)表单和删除的表单。
关于如何完成这项工作的任何想法?
答案 0 :(得分:1)
我可以找到这个问题的最佳答案是覆盖表单上的save
:
class CustomForm(forms.ModelForm):
class Meta:
model = Widget
complexify = models.BooleanField()
def save(self, *args, **kwargs):
obj = super(CustomForm, self).save(*args, **kwargs)
obj.complexify = self.cleaned_data.get("complexify")
return obj
然后当你处理它们时它就可以使用了:
for object in formset.save(commit=False):
if object.complexify:
object.do_complicated()
答案 1 :(得分:0)
我遇到了类似的问题,需要在保存之前更新表单中的字段。我的解决方案是执行上面建议的操作,但是然后跳过使用has_changed方法未更改的表单,如下所示:
for form in formset.forms:
object = form.save(commit=False)
if form.has_changed():
#make additions to object here
object.save()
我从未使用过complexify标志,但你的问题似乎与我自己的问题有关,所以我想我会传递信息。当然,如果有人看到任何会导致这种方法出现问题的东西,请告诉我,我仍然是Django的初学者。