为啥 django.forms.CharField 中缺少“空白”,但在 django.db.models.CharField 中存在?
Posted
技术标签:
【中文标题】为啥 django.forms.CharField 中缺少“空白”,但在 django.db.models.CharField 中存在?【英文标题】:Why is "blank" is missing in django.forms.CharField, but present in django.db.models.CharField?为什么 django.forms.CharField 中缺少“空白”,但在 django.db.models.CharField 中存在? 【发布时间】:2013-04-30 13:41:31 【问题描述】:背景
我有一个模型有两个字段设置为空白:
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)
]
)
注意:这两个长度值实际上是从数据库中获取的,但我选择不包含该代码以使示例更短。
问题
当我使用这些自定义字段时,blank
选项将被覆盖/忽略。
我尝试将 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"].max_length = title_max_length
self.fields["info"].widget = forms.Textarea
self.fields["info"].validators = [MaxLengthValidator(info_max_length)]
执行此操作时,blank
选项有效,但动态 max_length 不会应用于表单。
我试图查看 django 源代码,但我很新,所以现在无法接受。
有什么方法可以实现吗?
【问题讨论】:
您是否尝试在表单中添加 required=False 参数? @AlagappanRamu:不,我没有。我非常专注于寻找“空白”,以至于我在文档中错过了它。我在CharField
创建中添加了required = False
,这解决了问题。写下您的评论作为答案,以便我接受并投票。谢谢!
【参考方案1】:
创建表单时,除了max_length
、小部件和验证器之外,将以下参数添加到CharField
:
forms.CharField(...,required = False)
在 Django 中,模型中的 blank=True
与表单中的 required=False
相关。
【讨论】:
以上是关于为啥 django.forms.CharField 中缺少“空白”,但在 django.db.models.CharField 中存在?的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用 glTranslatef?为啥不直接更改渲染坐标?
为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?