Background
I have a model with two fields that are set the blank:
我有一个模型有两个字段设置为空白:
class News(models.Model):
title = models.CharField(max_length = 50, blank = True)
info = models.TextField(blank = True)
The thing is that I want to set the max_length
dynamically when the form is built, so I have a custom form:
问题是我想在构建表单时动态设置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)
]
)
Note: Those two length values are actually fetched from the database, but I chose not to include that code to keep the examples shorter.
注意:这两个长度值实际上是从数据库中提取的,但我选择不包含该代码以使示例更短。
The problem
When I'm using those custom fields the blank
option is overwritten/ignored.
当我使用这些自定义字段时,会覆盖/忽略空白选项。
I tried just adding the max_length, widget and validators to the existing fields, like this:
我尝试将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)]
When doing this the blank
option works, but the dynamic max_length is not applied to the form.
执行此操作时,空白选项有效,但动态max_length不会应用于表单。
I tried to look in the django source, but I'm quite new so it's too much to take in right now.
我试着看看django来源,但我很新,所以现在太过分了。
Is there some way I can achieve this?
有什么办法可以实现吗?
1 个解决方案
#1
14
When creating your form, add the following parameter to CharField apart from the max_length, widget and validators:
创建表单时,除了max_length,widget和validators之外,还要将以下参数添加到CharField:
forms.CharField(...,required = False)
In Django, blank=True in models correlates to required=False in forms.
在Django中,模型中的blank = True与表单中的required = False相关。
#1
14
When creating your form, add the following parameter to CharField apart from the max_length, widget and validators:
创建表单时,除了max_length,widget和validators之外,还要将以下参数添加到CharField:
forms.CharField(...,required = False)
In Django, blank=True in models correlates to required=False in forms.
在Django中,模型中的blank = True与表单中的required = False相关。