Django:如何使用自定义模型表单保存表单集?
尝试使用自定义表单保存一组对象:Django:如何使用自定义模型表单保存表单集?,django,django-forms,Django,Django Forms,尝试使用自定义表单保存一组对象: class CustomForm(forms.ModelForm): class Meta: model = Widget complexify = models.BooleanField() 选中complexify后,我需要对小部件对象执行一些复杂的操作 我做不到: for object in formset.save(commit=False): ... 因为它没有complexify标志 而每一种形式似乎都是错
class CustomForm(forms.ModelForm):
class Meta:
model = Widget
complexify = models.BooleanField()
选中complexify后,我需要对小部件对象执行一些复杂的操作
我做不到:
for object in formset.save(commit=False):
...
因为它没有complexify
标志
而每一种形式似乎都是错误的:
for form in formset.forms:
...
因为它包括额外的(空)表单和删除的表单
关于如何完成这项工作有什么想法吗?我遇到了类似的问题,需要在保存表单之前更新表单中的字段。我的解决方案是按照上面的建议做一些事情,但是跳过那些没有使用“方法已更改”更改的表单,例如:
for form in formset.forms:
object = form.save(commit=False)
if form.has_changed():
#make additions to object here
object.save()
我从未使用过复杂化标志,但你的问题似乎与我自己的问题一致,所以我想我应该传递信息。当然,如果有人看到这种方法会导致以后出现问题,请告诉我,我仍然是Django初学者 对于这个问题,我能找到的最佳答案是覆盖表单上的
保存
:
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()
我真的试过了,但如果你也能删除它们,你还有另一件事要检查。我希望有一种内置的django方式也能处理删除。缺少一个
*
:def save(self,*args,**kwargs):