如果我使用ModelForm创建文本区域表单元素,如何更改它的宽度?

以下是我的产品类:

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是实际的表单元素...

推荐答案

The easiest way for your use case is to use CSS美元.这是一种用于定义表示的语言.查看Form生成的代码,记下您感兴趣的字段的ID,并通过CSS更改这些字段的外观.

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

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

Second approach是将关键字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

described in Django documentation.

Third approach将暂时离开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

此方法具有以下优点:

  • 您可以为从模型自动生成的字段定义小部件属性,而无需重新定义整个字段.
  • 它不取决于表单的前缀.

Django相关问答推荐

覆盖保存以创建范围的多个对象()

Django 中主键的隐式 UUID 自动字段

如何使用邮箱确认码创建django注册

Django 相当于子查询

如何在 Django 模型中存储元组列表

Pytest-django - 测试创建和传递所需的用户对象

Django Query 在基于通用类的 UpdateView 中重复了 2 次

如何根据反向外键相关模型的字段过滤 QuerySet?

如何根据查询集中的条件返回多个聚合?

Python 和 Django OperationalError (2006, 'MySQL server has gone away')

django- nginx: [emerg] open() "/etc/nginx/proxy_params" 在 /etc/nginx/sites-enabled/myproject:11 中失败(2:没有这样的文件或目录)

Django 1.9 中 django.db.models.loading.get_model() 的类似功能是什么?

django 表单为关键字参数获取了多个值

__init__() 得到了一个意外的关键字参数user

Matplotlib - Tcl_AsyncDelete:异步处理程序被错误的线程删除?

如何从 Django 的 TabularInline 管理视图中省略对象名称?

Django:如何将数据保存到 ManyToManyField?

如何在 django 中捕获UNIQUE constraint failed404

如何在 Django 中更改上传文件的文件名?

Django REST 框架中的每个字段权限