2つの別々のビュー関数(add / edit:)からトリガーされた製品を追加/編集するためのフォーム(フィールド'user'はユーザーの外部キー)があるとします。
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))
フォームのsaveメソッドは次のようになります。
def save(self, user, *args, **kwargs):
self.instance.user = user
post = super(ProductAddForm, self).save(*args, **kwargs)
post.save()
誰かがこのsaveメソッドで何が起こっているのかを段階的に教えてもらえますか?このフォームでsuperを呼び出すのはなぜですか?関数呼び出しが同じ場合、新製品を編集して保存するときの処理全体の違いは何ですか?