Django 使用 Widget 覆盖 ModelForm 属性
Django use Widget to Override ModelForm Attributes
我有一个最大长度为 300 的标签 CharField
,但我需要为默认输入保留其中的 100 个字符,但我希望用户能够通过输入文本设置剩余的 200 个字符盒子。我这样做的目的是将模型中字符字段的最大长度设置为 300,并在我的表单中为输入创建一个小部件,将用户的输入限制为 200 个字符。
但是,我做了一些测试,发现我无法根据字符字段本身的最大长度更改输入字段的最大长度。有谁知道怎么做?
models.py
class Video(models.Model):
title = models.CharField(max_length=50)
tags = models.CharField(max_length=200)
form.py
class VideoForm(forms.ModelForm):
class Meta:
model=Video
fields=['title','description','authorId','tags','video','thumbnail']
#a widget is django's representation of an html input element
widgets = {
'tags': forms.Textarea(attrs={'cols': 80, 'rows': 20,'maxlength':5}),
}
上面代码的结果 html textarea 是 <textarea cols="80" id="id_tags" maxlength="200" name="tags" rows="20"></textarea>
,但我希望 maxlength
是 5.
覆盖 VideoForm 的构造函数:
class VideoForm(forms.ModelForm):
...
def __init__(self, *args, **kwargs):
super(VideoForm, self).__init__(*args, **kwargs)
self.fields['tags'].widget.attrs['maxlength'] = 5
我有一个最大长度为 300 的标签 CharField
,但我需要为默认输入保留其中的 100 个字符,但我希望用户能够通过输入文本设置剩余的 200 个字符盒子。我这样做的目的是将模型中字符字段的最大长度设置为 300,并在我的表单中为输入创建一个小部件,将用户的输入限制为 200 个字符。
但是,我做了一些测试,发现我无法根据字符字段本身的最大长度更改输入字段的最大长度。有谁知道怎么做?
models.py
class Video(models.Model):
title = models.CharField(max_length=50)
tags = models.CharField(max_length=200)
form.py
class VideoForm(forms.ModelForm):
class Meta:
model=Video
fields=['title','description','authorId','tags','video','thumbnail']
#a widget is django's representation of an html input element
widgets = {
'tags': forms.Textarea(attrs={'cols': 80, 'rows': 20,'maxlength':5}),
}
上面代码的结果 html textarea 是 <textarea cols="80" id="id_tags" maxlength="200" name="tags" rows="20"></textarea>
,但我希望 maxlength
是 5.
覆盖 VideoForm 的构造函数:
class VideoForm(forms.ModelForm):
...
def __init__(self, *args, **kwargs):
super(VideoForm, self).__init__(*args, **kwargs)
self.fields['tags'].widget.attrs['maxlength'] = 5