2011-07-13 37 views
0

我試圖編輯某人創建的一些舊代碼,這是一個帶有產品的迷你電子商務類型頁面。這個想法是,如果有人將一種產品添加到他們的購物車中,他們不能再添加一個產品,也不會涉及數量。Django對錯誤的對象進行驗證?

你會注意到下面的代碼,前面的人已經爲每個項目設置了一個會話。我想確保用戶無法兩次選擇相同的項目,因此我想測試以確定會話是否已經存在,並在會話確實存在的情況下引發表單驗證錯誤。下面的代碼不起作用,問題是當它發現第一個True條件時它似乎拋出ValidationError,所以沒有其他條件被檢查。例如 - 如果我已經在我的購物車中添加「home_options」,然後選擇「我的購物車中不存在」的「advanced_options」,即使「advanced_options」不在我的購物車中,也會引發forms.ValidationError, 「中間和那也沒有工作,任何建議?

def clean(self): 
    err = _("You already have this item in your cart.") 
    if self.request: 
     try: 
      if self.request.session['home_options']: 
       raise forms.ValidationError(err) 
      if self.request.session['value_home_options']: 
       raise forms.ValidationError(err) 
      if self.request.session['super_options']: 
       raise forms.ValidationError(err) 
      if self.request.session['advanced_options']: 
       raise forms.ValidationError(err) 
      if self.request.session['advanced_highspeed_options']: 
       raise forms.ValidationError(err)   
     except KeyError: 
      pass # only gets here if the session does not exist, add the item to the cart in this case. 

回答

1

您似乎沒有檢查用戶是否真的選擇了該項目。

session = self.request.session 
data = self.cleaned_data 
if 'home_options' in data and 'home_options' in session: 
    raise... 
... 
+0

丹尼爾,我欠你一瓶啤酒,你回答了我的兩個問題,明顯的疏忽,但是謝謝,我討厭在這個舊代碼中黑客:( – JeffC