我最近問了這個問題,并按照最初所說的解決了我的問題。以下代碼有效:class FloatRangeField (FloatField): """A FloatField constrained to a given range.""" def __init__ (self, minimum, maximum, **kwargs): minmax = [MinValueValidator (minimum), MaxValueValidator (maximum)] self.minimum = minimum self.maximum = maximum kwargs ['validators'] = minmax FloatField.__init__ (self, **kwargs) def deconstruct (self): name, path, args, kwargs = super () .deconstruct () kwargs ['minimum'] = self.minimum kwargs ['maximum'] = self.maximum del kwargs ['validators'] return name, path, args, kwargsclass AffinityField (FloatRangeField): """An affinity is a float from -1 (hate) to +1 (love).""" def __init__ (self, **kwargs): FloatRangeField.__init__ (self, -1.0, 1.0, **kwargs) def deconstruct (self): name, path, args, kwargs = super () .deconstruct () del kwargs ['minimum'] del kwargs ['maximum'] return name, path, args, kwargs但是,我不認為這是完整的。我是Django的新手,但是我的理解是,添加驗證器會約束模型愿意保存的數據,但與此分開的是,正如此答案所表明的那樣,在表單級別存在驗證。如果您需要表單級別的約束,則可以將min_value和max_value傳遞給表單字段:myfloat = forms.FloatField(min_value=0.0, max_value=1.0)我沒有任何可見的形式,但(剛開始學習?。?,所以我不知道是否有必要單獨做到這一點,但是從它的聲音我就必須要通過min_value和max_value以及驗證對象。這是我的嘗試:class FloatRangeField (FloatField): """A FloatField constrained to a given range.""" def __init__ (self, minimum, maximum, **kwargs): minmax = [MinValueValidator (minimum), MaxValueValidator (maximum)] self.minimum = minimum self.maximum = maximum # Validators for the model kwargs ['validators'] = minmax # Arguments for the form validation kwargs ['min_value'] = minimum kwargs ['max_value'] = maximum這引發了一個異常: FloatField.__init__ (self, **kwargs)TypeError: __init__() got an unexpected keyword argument 'min_value'但是根據文檔,該min_value參數是預期的,因此我不知道此錯誤的真正含義。我以為我了解字段解構函數的原理(刪除kwargs在子類中定義它們時不需要作為輸入的那些東西__init__),但也許不是。我使用min_valueand的方式出了什么問題max_value?
1 回答

慕絲7291255
TA貢獻1859條經驗 獲得超6個贊
看起來您混合了表單字段和模型字段。您在問題描述表格的中提供的鏈接FloatField
。
但是默認情況下FloatField
,您要自定義的模型沒有min_value
和max_value
參數。
添加回答
舉報
0/150
提交
取消