我有以下 BidForm 类...
class BidForm(ModelForm):
# listing = forms.CharField(widget=forms.HiddenInput())
class Meta:
model = Bids
fields = ('listing', 'bid_price')
# def clean_bid_price(self):
# data = self.cleaned_data["bid_price"]
# listing = self.instance.listing
# if listing.last_high_bid:
# if data <= listing.last_high_bid.bid_price:
# raise forms.ValidationError('bid price less than last bid price')
# else:
# if data < listing.starting_bid_price:
# raise forms.ValidationError('bid price less than starting price')
# return data
当我取消对列表字段或 clean_bid_price 验证方法的注释时,表单无法加载表单数据,并且我获得了实例对象设置为 None 类型的表单实例。
如果我让表单保持原样,那么我调试了表单的完整 init 方法并且看不到帖子数据的加载位置。尽我所能在 pycharm 调试器中看到,发布数据永远不会加载到 init 方法中的表单或模型实例上。然而不知何故,表单的模型实例神奇地获得了发布数据和字段集。已经花了很多时间尝试调试简单的函数,但不知道为什么会失败。
何时调用字段上的干净方法?在 django 3.1.7 中,我的 clean 方法根本没有被调用,因为 _errors 的 dict 为空,而 is_valid 或 self._errors 根本无法命中 self.clean 方法。