В формах django для сохранения других данных я обычно использую form_valid()
, но также могу использовать save()
метод formclass.
Сегодня я переопределил save()
вместо form_valid()
, и у меня возникла проблема с моим множеством полей.
При использовании значения многих полей не сохраняются, но когда я использую 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
, они начинают сохранять.