我希望让我的用户输入数量的整数值,然后检查输入的数字是否大于可用的总数量。如果它更大,则用户不能下订单,因此会出现验证错误。但是,我遇到了一些麻烦。使用“clean(self)”自动填充Django表单提高ValidationError
既然这样我models.py看起来是这样的:
class DirectInvestment(models.Model):
offering = models.ForeignKey('company.DirectOffering', blank=True)
quantity = models.IntegerField()
的总份额数从offering.current_shares_outstanding
导出(因为它是一个外键)。
而且我forms.py看起来是这样的:
class DirectInvestmentForm(forms.ModelForm):
class Meta:
model = DirectInvestment
fields = ('offering', 'quantity')
def clean(self):
cleaned_data = super(DirectInvestmentForm, self).clean()
print(cleaned_data)
quantity = cleaned_data.get("quantity")
total_available_shares = cleaned_data.get("offering.current_shares_outstanding")
if quantity > total_available_shares:
raise forms.ValidationError("Quantity exceeds total shares available")
最后,这里是我的views.py相关位:
form = DirectInvestmentForm(request.POST or None)
form.fields['offering'].widget = forms.HiddenInput()
if form.is_valid():
investment = form.save(commit=False)
offering = DirectOffering.objects.get(id=offering_id) # offering_id I get from the URL
investment.offering = offering
investment.save()
return HttpResponseRedirect('/investments')
context_dict['form'] = form
当我朗姆酒我的代码并提交表单我得到的错误:
unorderable types: int() > NoneType()
如果我看本地变量我看到cleaned_data有以下几点:
{'offering': None, 'quantity': 123456789}
在哪里我错了你知道吗?
是的,我有'blank = True',因为我在视图中自动填充此字段。我应该删除它吗? – ng150716
不,如果您的应用程序需要在您的模型中管理ForeignKeys,则不应删除此内容。但你需要除了无类型的回应,让你的应用程序处理它们。如果它是None,你可以添加一个条件来将'total_variable_shares'赋值为0。 –