如何在Django模型中设置textField中行,列的大小

时间:2011-06-30 14:29:05

标签: django django-models

我有这个模型

summary         = models.TextField()

但我想只有4行15列。

如果我这样做,我还需要重新安装数据库。

7 个答案:

答案 0 :(得分:102)

TextField是一种字段,默认情况下ModelForm使用时会使用Textarea窗口小部件。 Fields处理后端存储,widgets进行前端编辑。

因此,您需要指定要与字段一起使用的窗口小部件。您要创建ModelForm并根据the documentation指定要使用的widget

from django import forms

class MyForm(forms.ModelForm):
    class Meta:
        model = MyModel
        widgets = {
          'summary': forms.Textarea(attrs={'rows':4, 'cols':15}),
        }

答案 1 :(得分:16)

以下是将rows / cols属性更改为textarea的表单特定等效项。使用forms.Textarea小部件并设置attrs字典值:

class LocationForm(forms.ModelForm):

    auto_email_list = forms.CharField(required=False, widget=forms.Textarea(attrs={'rows': 2, 'cols': 40}))
    notes = forms.CharField(required=False, widget=forms.Textarea(attrs={'rows': 4, 'cols': 40}))

    class Meta:
        model = Location
        exclude = ['id']

希望这有助于那些寻找特定表格的人

答案 2 :(得分:10)

如果您正在使用django-crispy-forms,则可以在__init__()功能中访问小部件,如下所示:

self.fields['summary'].widget.attrs['rows'] = 4
self.fields['summary'].widget.attrs['columns'] = 15

我想你可以用非脆性形式的ModelForm将它设置为这种方式,但你可以在你的小部件定义中这样做,如上所示。我刚发现这篇文章并认为我分享了我是如何用crispyforms做的。

答案 3 :(得分:4)

你也可以按如下方式使用jQuery:

 $(document).ready(function(){
    $("textarea").attr({"rows": "4",
                        "cols": "15"
    });
});

答案 4 :(得分:1)

django-widget-tweaks包让这很简单。在您的模板中:

{% load widget_tweaks %}
...
{{ mytextareafield|attr:"rows:3" }}

答案 5 :(得分:1)

在Meta中使用小部件。 请注意,您还必须在模型窗体中添加该字段

class MyModelForm(forms.ModelForm):
    address = forms.CharField()
        
    class Meta:
        model = MyModel
        exclude = ()
        widgets = {
            address': forms.Textarea(attrs={'rows':1, 'cols':15}),
        }

答案 6 :(得分:0)

第一个答案可能是问题的正确答案,但django-widget-tweaks包也是更改更多属性的一个很好的选择,例如设置特定的CSS类。

如果您想轻易改变其他属性,请考虑该选项。