2010-07-01 64 views
7

比方說,我有添加/編輯產品(場「用戶」是一個外鍵,我的用戶)形式從兩個不同的視圖功能觸發 - 添加/編輯: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() 

有人可以告訴我發生了什麼事在一步此保存方法步驟爲什麼我們稱這種形式的超級正是在整個處理的差異時,我們如果函數調用是相同的,編輯並保存新產品?

+0

您是否看過docs.python.org以查看'super'函數的作用? http://docs.python.org/library/functions.html#super你在那裏學到了什麼? – 2010-07-01 01:53:43

+0

「編輯」是什麼意思?你的意思是「驗證」?這是表單的一個獨立功能。或者你的意思是別的嗎? – 2010-07-01 02:11:36

+0

「2 views」是指「兩個視圖功能」嗎?如果是這樣,請用所有這些信息更新您的問題。請停止添加評論。請更新問題以包含所有事實。然後刪除評論。 – 2010-07-01 02:20:34

回答

3

self.instance.user =用戶

保存用戶參數到self.instance對象的用戶屬性

後=超(ProductAddForm,個體經營).save(* ARGS ,** kwargs)

調用超類保存方法來獲得結果對象。

post.save()

保存生成的對象。這可能是不必要的,或者它可能是必需的,這取決於save的參數。

請參閱http://docs.djangoproject.com/en/1.2/topics/forms/modelforms/#the-save-method。如果提交是False,那麼post對象尚未保存到數據庫。