我使用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/