2011-07-13 7 views
0

誰かが作成した古いコードを編集しようとしています。これは、製品を含むミニeコマースタイプのページです。アイデアは、誰かが自分のカートに商品を追加した場合、同じ商品を再び追加することはできないということです。Djangoは間違ったオブジェクトに対して検証を行いますか?

前の人がこれらのアイテムのそれぞれについてセッションを設定していたことに、以下のコードで気づくでしょう。ユーザーが同じ項目を2回選択できないようにしたいので、セッションがすでに存在するかどうかを確認するためのテストを行い、セッションが存在する場合はフォームの検証エラーを発生させます。以下のコードは動作しませんが、問題は最初の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

ダニエル、私はあなたにビールを借りています。あなたは私の質問に2つ答えました。明白な見落としですが、私はこの古いコードでハッキングしたくありません。 – JeffC

関連する問題