我有一个ModelForm
与一个自定义的保存方法来填充一个模型字段从url参数(传递到表单)的kwarg:
from app.models import MyModel
class MyModelForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.fk_customer = kwargs.pop('customer')
super(MyModelForm, self).__init__(*args, **kwargs)
class Meta:
model = MyModel
fields = '__all__'
def clean(self):
cleaned_data = super(MyModelForm, self).clean()
cleaned_data['fk_customer'] = self.fk_customer
return cleaned_data
当我在我的视图中检查cleaned_data
时,fk_customer
存在并且有效。然而is_valid()
是假的,ModelForm
不会save()
。如果我重写一些东西并强制保存,字段fk_customer
被保存为None
。
发生了什么,我如何改变cleaned_data
,仍然有效?
如果您的表单中没有显示customer
字段,那么您应该将其从表单类中排除,而不是使用__all__
。
然后,我将尝试在表单的save
方法而不是clean
方法中设置客户。以下内容未经过测试:
class MyModelForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.customer = kwargs.pop('customer')
super(MyModelForm, self).__init__(*args, **kwargs)
class Meta:
model = MyModel
exclude = ('customer',)
def save(self, commit=True)
instance = super(MyModelForm, self).save(commit=False)
instance.customer = self.customer
if commit:
instance.save()
self.save_m2m()
return instance