在 django 表单中,为了保存我通常使用的其他数据form_valid()
但因为我也可以使用save()
表单类的方法。
今天我重写了save()
代替form_valid()
我的多对多领域出现了问题。
使用时,manytomanyfield 的值不会保存,但是当我使用时form_valid()
他们开始储蓄。谁能告诉我原因以及两者之间的区别是什么,哪种方法最方便以及在什么情况下?
这是我对 save() 方法的重写:
class ProductCreateForm(forms.ModelForm):
sizes = make_ajax_field(ProductCreateModel,'sizes','sizes')
colours = make_ajax_field(ProductCreateModel,'colours','colours')
class Meta:
model = ProductCreateModel
fields = ('title','category',
'regions',)
def __init__(self,*args,**kwargs):
self.request = kwargs.pop("request")
super(ProductCreateForm, self).__init__(*args, **kwargs)
def save(self):
product = super(ProductCreateForm, self).save(commit=False)
user = self.request.user
product.location = user.user_location
product.save()
return product
当我重写 form_valid() 方法时:
def get_form_kwargs(self):
kwargs = super(ProductCreateView,self).get_form_kwargs()
kwargs.update({'request':self.request})
return kwargs
def form_valid(self, form):
product = form.save(commit=False)
user = self.request.user
form.instance.user = user
form.instance.location = user.user_location
form.save()
return super(ProductCreateView, self).form_valid(form)
sizes
,colours
and regions
是 m2m 字段,正如我在覆盖时提到的save()
m2m 的值不会被保存,但是当我覆盖时form_valid
他们开始储蓄。