在你里面
save你必须有论点
commit。如果有任何内容覆盖你的表单,或者想要修改其保存的内容,它将执行操作
save(commit=False),修改输出,然后将其保存。
另外,你的ModelForm应该返回它保存的模型。通常,ModelForm的
save外观类似于:
def save(self, commit=True): m = super(CallResultTypeForm, self).save(commit=False) # do custom stuff if commit: m.save() return m
最后,由于你访问事物的方式,许多ModelForm都无法使用。相反
self.callResult,你需要使用
self.fields['callResult']。
更新:针对你的回答:
旁:为什么不在
ManyToManyFieldModel中使用s而不用这样做呢?似乎你正在存储冗余数据并为自己(和我
:P)做更多的工作。
from django.db.models import AutoField def copy_model_instance(obj): """ Create a copy of a model instance. M2M relationships are currently not handled, i.e. they are not copied. (Fortunately, you don't have any in this case) See also Django #4027. From http://blog.elsdoerfer.name/2008/09/09/making-a-copy-of-a-model-instance/ """ initial = dict([(f.name, getattr(obj, f.name)) for f in obj._meta.fields if not isinstance(f, AutoField) and not f in obj._meta.parents.values()]) return obj.__class__(**initial) class CallResultTypeForm(ModelForm): callResult = ModelMultipleChoiceField(queryset=CallResult.objects.all()) campaign = ModelMultipleChoiceField(queryset=Campaign.objects.all()) callType = ModelMultipleChoiceField(queryset=CallType.objects.all()) def save(self, commit=True, *args, **kwargs): m = super(CallResultTypeForm, self).save(commit=False, *args, **kwargs) results = [] for cr in self.callResult: for c in self.campain: for ct in self.callType: m_new = copy_model_instance(m) m_new.callResult = cr m_new.campaign = c m_new.calltype = ct if commit: m_new.save() results.append(m_new) return results
允许继承
CallResultTypeForm,以防万一。



