我希望讓我的用戶輸入數量的整數值,然後檢查輸入的數字是否大於可用的總數量。如果它更大,則用戶不能下訂單,因此會出現驗證錯誤。但是,我遇到了一些麻煩。使用「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。 –