小编典典

更改在Django中使用ModelForm创建的表单元素的宽度

python

如果使用ModelForm创建textarea表单元素,该如何更改它的宽度?

这是我的产品类别:

class ProductForm(ModelForm):
    long_desc = forms.CharField(widget=forms.Textarea)
    short_desc = forms.CharField(widget=forms.Textarea)
    class Meta:
        model = Product

还有模板代码

{% for f in form %}
    {{ f.name }}:{{ f }}
{% endfor %}

f 是实际的表单元素…


阅读 216

收藏
2021-01-20

共1个答案

小编典典

用例最简单的方法是使用CSS 。这是一种用于定义表示的语言。查看由表单生成的代码,记下您感兴趣的字段的ID,并通过CSS更改这些字段的外观。

long_descProductForm中字段的示例(当表单没有自定义前缀时):

#id_long_desc {
    width: 300px;
    height: 200px;
}

第二种方法 是将attrs关键字传递给小部件构造函数。

class ProductForm(ModelForm):
    long_desc = forms.CharField(widget=forms.Textarea(attrs={'cols': 10, 'rows': 20}))
    short_desc = forms.CharField(widget=forms.Textarea)
    class Meta:
        model = Product

它的Django的文档中描述

第三种方法 是将newforms的漂亮的声明性界面保留一段时间,然后在自定义构造函数中设置您的小部件属性。

class ProductForm(ModelForm):
    long_desc = forms.CharField(widget=forms.Textarea)
    short_desc = forms.CharField(widget=forms.Textarea)
    class Meta:
        model = Product

    # Edit by bryan
    def __init__(self, *args, **kwargs):
        super(ProductForm, self).__init__(*args, **kwargs) # Call to ModelForm constructor
        self.fields['long_desc'].widget.attrs['cols'] = 10
        self.fields['long_desc'].widget.attrs['rows'] = 20

此方法具有以下优点:

  • 您可以为从模型自动生成的字段定义窗口小部件属性,而无需重新定义整个字段。
  • 它不依赖于表单的前缀。
2021-01-20