我最近问了这个问题,并按照最初所说的解决了我的问题。以下代码有效:
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, kwargs
class 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?
慕丝7291255
相关分类