gpt4 book ai didi

django - 以django形式覆盖max_value

转载 作者:行者123 更新时间:2023-12-02 05:03:08 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com