猿问

FloatField __init__收到了意外的关键字参数'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


        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?


精慕HU
浏览 174回答 1
1回答

慕丝7291255

看起来您混合了表单字段和模型字段。您在问题描述表格的中提供的链接FloatField。但是默认情况下FloatField,您要自定义的模型没有min_value和max_value参数。
随时随地看视频慕课网APP

相关分类

Python
我要回答