我有这个模型
summary = models.TextField()
但我想只有4行15列。
如果我这样做,我还需要重新安装数据库。
答案 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类。
如果您想轻易改变其他属性,请考虑该选项。