Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:如何使用自定义模型表单保存表单集?_Django_Django Forms - Fatal编程技术网

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):