Django form.save一步一步
假设我有一个用于添加/编辑产品的窗体(使用两个单独的视图函数触发的字段“用户”是我用户的外键) - 添加/编辑:
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()
有人可以一步一步告诉我这种保存方法发生了什么吗?为什么我们在这个表单上调用超级函数?如果函数调用是相同的,当我们编辑和保存新产品时,整个处理有什么区别?
self.instance.user = user
将用户参数保存到self.instance对象的用户属性中
post = super(ProductAddForm,self).save(* args,** kwargs)
调用超类保存方法以获取生成的对象。
post.save()
保存结果对象。 这可能是不必要的,或者它可能是必不可少的,这取决于要save
的参数。
请参阅http://docs.djangoproject.com/en/1.2/topics/forms/modelforms/#the-save-method。 如果commit为False,那么post
对象还没有被保存到数据库中。