Django使用Widget来覆盖ModelForm属性

时间:2015-01-17 04:10:27

标签: python django forms widget maxlength

我有一个标签CharField,最大长度为300,但我需要为默认输入保留100个字符,但我希望用户能够通过输入文本框设置剩余的200个字符。我的工厂是将模型中的字段的最大长度设置为300,并在我的表单中为输入创建一个小部件,将用户的输入限制为200个字符。

但是,我做了一些测试,发现我无法从charfield本身的maxlength更改输入字段的最大长度。有谁知道怎么做?

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。

1 个答案:

答案 0 :(得分:5)

覆盖VideoForm的构造函数:

class VideoForm(forms.ModelForm):
    ...
    def __init__(self, *args, **kwargs):
        super(VideoForm, self).__init__(*args, **kwargs)
        self.fields['tags'].widget.attrs['maxlength'] = 5