背景
我有一个模型,其中两个字段设置为空:
class News(models.Model):
title = models.CharField(max_length = 50, blank = True)
info = models.TextField(blank = True)
问题在于我希望能够动态设置表单构建时的max_length
,因此我有一个自定义表单:
class NewsForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(NewsForm, self).__init__(*args, **kwargs)
title_max_length = 20
info_max_length = 100
self.fields["title"] = forms.CharField(max_length = title_max_length)
self.fields["info"] = forms.CharField(
widget = forms.Textarea,
validators = [
MaxLengthValidator(info_max_length)
]
)
注意:这两个长度值实际上是从数据库中获取的,但我选择不包含该代码以使示例更短。
问题
当我使用这些自定义字段时,“空白”选项被覆盖/忽略了。
我尝试将max_length、widget和validators添加到现有字段中,像这样:
class NewsForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(NewsForm, self).__init__(*args, **kwargs)
title_max_length = 20
info_max_length = 100
self.fields["title"].max_length = title_max_length
self.fields["info"].widget = forms.Textarea
self.fields["info"].validators = [MaxLengthValidator(info_max_length)]
在这样做时,blank
选项是有效的,但动态max_length未应用于表单。
我试图查看django源代码,但我很新,所以现在接受不了这么多。
有没有什么办法可以实现这个?
CharField
创建中添加了required = False
,问题得到了解决。请将您的评论作为答案编写,以便我可以接受并点赞。谢谢! - rzetterberg