【发布时间】:2018-12-12 20:16:30
【问题描述】:
在django表单中,为了保存其他数据,我通常使用form_valid(),但我也可以使用formclass的save()方法。
今天我覆盖了save() 而不是form_valid(),但我的manytomanyfield 出现了问题。
使用时,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 和 regions 是 m2m 字段,正如我在覆盖 save() 时提到的那样,m2m 的值不会被保存,但是当我覆盖 form_valid 时,它们会开始保存。
【问题讨论】:
-
能否请您发布您的覆盖。另外,您能否解释一下他们开始保存是什么意思。您在数据库中看到它们了吗?它们出现在您的表单上?
-
@scharette 我添加了我的两种方法。
标签: python django django-models django-forms django-views