Допустим, у меня есть форма для добавления / редактирования продуктов (поле «пользователь» является внешним ключом для моего пользователя), запускаемая из двух отдельных функций просмотра - добавление / редактирование:
def product_add(request):
userprofile = UserProfile.objects.get(user=request.user)
if request.method == 'POST':
form = ProductAddForm(request.POST, request.FILES,)
if form.is_valid():
form.save(user=request.user)
else:
form = ProductAddForm()
return render_to_response('products/product_add.html', {
'form':form, 'user':request.user,
}, context_instance=RequestContext(request))
def product_edit(request, id):
product = get_object_or_404(Product, id=id, user=request.user)
if product.user.id!=request.user.id:
raise Http404
if request.method == 'POST':
form = ProductAddForm(request.POST, request.FILES, instance=product)
if form.is_valid():
form.save(user=request.user)
else:
form = ProductAddForm(instance=product)
return render_to_response('products/product_edit.html', {
'form':form, 'user':request.user,
}, context_instance=RequestContext(request))
ФормаМетод сохранения выглядит следующим образом:
def save(self, user, *args, **kwargs):
self.instance.user = user
post = super(ProductAddForm, self).save(*args, **kwargs)
post.save()
Может кто-нибудь сказать мне, что происходит в этом методе сохранения шаг за шагом? Почему мы вызываем super в этой форме и в чем разница во всей обработке при редактировании и сохраненииновый продукт, если вызов функции такой же?