django - 以 django 形式覆盖 max_value

标签 django django-forms

我使用ModelForm,我想为IntegerField设置max_value,而不会丢失从模型创建的其他属性(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 类似的目标?

最佳答案

如果 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

关于django - 以 django 形式覆盖 max_value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16708997/

相关文章:

python - 为什么这个 django url 没有重定向?

python - Django 表格 : disable field if booleanfield is checked

具有未知数量的复选框字段和多个操作的 Django 表单

database - 没有数据库的django模型

python - Django Web 应用程序的棘手编码逻辑

Django 和领域层

Django外键表单保存

python - Pycharm 在使用 pipenv 安装包时警告 package requirement not satisfied

python - Django - 更改字段验证消息

django - 如何同时提交表单和表单集