我正在尝试编辑某人创建的旧代码,这是一个带有产品的迷你电子商务类型页面。这个想法是,如果有人将产品添加到他们的购物车中,他们不能再添加相同的产品,则不会涉及数量。
你会注意到下面的代码,前一个人已经为每个项目设置了一个会话。我想确保用户不能选择相同的项目两次,所以我计算测试以查看会话是否已经存在并且如果会话确实存在则提出表单验证错误。下面的代码不起作用,问题是它似乎在找到第一个True条件时抛出ValidationError,因此甚至没有检查其他任何条件。例如 - 如果我已经在我的购物车中添加“home_options”,然后选择我的购物车中不存在的“advanced_options”,它会引发forms.ValidationError即使“advanced_options”不在我的购物车中,我也有“或者“中间和那也没有用,有什么建议吗?
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.
答案 0 :(得分:1)
您似乎没有检查用户是否实际选择了该项目。
session = self.request.session
data = self.cleaned_data
if 'home_options' in data and 'home_options' in session:
raise...
...