2016-01-23 67 views
0

我有一個跟蹤產品數據的產品模型。對於每個產品項,項目數量必須是唯一的:處理表單中的不良表格

#models.py 

class Product(models.Model): 
    ad_date = models.CharField(max_length=20, unique=False, blank=True, null=True) 
    item_no = models.CharField(max_length=30, unique=True, blank=True, null=True) 
    mfg = models.CharField(max_length=30, unique=False, blank=True, null=True) 
    desc = models.CharField(max_length=200, blank=True, null=True) 
    … 

記錄通過模型表單集工廠提交的,允許在提交多個記錄的提交:

#views.py 

def add_first(request): 
    FRFormset = modelformset_factory(Product, fields='__all__', extra=30, form=FRForm) 
    saved_records = 0 
    if request.method == 'POST': 
     formset = FRFormset(request.POST, request.FILES) 

     if(formset.is_valid()): 
      for form in formset: 
       if form.has_changed(): 
        saved_records += 1 
      formset.save() 
      messages.success(request, '(' + str(saved_records) +') records successfully added to database.') 
      return HttpResponseRedirect('/b5/add_first/') 

    else: 
     queryset = Product.objects.none() 
     formset = FRFormset(queryset=queryset) 
     variables = RequestContext(request, {'formset':formset }) 
     return render_to_response("b5/addfirst_form.html", variables) 

我的問題是,如果一個提交的記錄有一個已經存在的項目號,整個提交失敗(拋出ValueError - 「視圖...沒有返回HttpResponse對象,它返回None」)

在視圖函數中可能有一個嘗試/擅長pt子句我可以在表單循環中寫入,這將允許重複記錄在默認情況下失敗,同時允許其他人保存?或者有另外一種方法可以配置這種行爲?

回答

0

這不是特定於formset的,並且沒有必要捕捉任何異常。相反,您應該返回響應,該響應將顯示哪些表單無效。

在您的視圖中沒有發生的原因很簡單,最後兩行在else語句中縮進。將它們移回一個縮進,以便當formset無效時以及請求爲GET時它們捕獲該案例。

+0

是的,我只知道我沒有返回響應,因爲我的視圖功能配置不正確。感謝您的簡潔解釋。 – kjarsenal