2

我使用 aModelForm并且我想为 a 设置一个 max_value 而IntegerField不会丢失从模型创建的其他属性(verbose_name 等)。

这是我的模型表单:

class DataForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(DataForm, self).__init__(*args, **kwargs)
        self.fields['start_range_points'].max_value = 1000
    class Meta():
        model = DataModel

这不起作用,django 不对大数应用验证。如果我以以下方式创建字段,则验证有效,但我会丢失从模型创建的信息。

class DataForm(ModelForm):
    start_range_points = forms.IntegerField(min_value=0, max_value=1000)
    class Meta():
        model = DataModel

我能做些什么来实现类似于尝试 #1 的目标?

4

1 回答 1

5

如果存在 max_value,则将 max_value的验证器添加到 IntegerField 的__init__函数中。因此,您将需要手动添加验证器,例如:

from django.core.validators import MaxValueValidator
class DataForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(DataForm, self).__init__(*args, **kwargs)
        validators = [ v for v in self.fields['start_range_points'].validators if not isinstance(v, MaxValueValidator) ]
        validators.append( MaxValueValidator(1000) )
        self.fields['start_range_points'].validators = validators

    class Meta():
        model = DataModel
于 2013-05-23T08:45:27.783 回答