如果使用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 是实际的表单元素…
f
用例最简单的方法是使用CSS 。这是一种用于定义表示的语言。查看由表单生成的代码,记下您感兴趣的字段的ID,并通过CSS更改这些字段的外观。
long_descProductForm中字段的示例(当表单没有自定义前缀时):
long_desc
#id_long_desc { width: 300px; height: 200px; }
第二种方法 是将attrs关键字传递给小部件构造函数。
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
此方法具有以下优点: