【发布时间】:2011-09-26 01:18:30
【问题描述】:
我有这个模型
summary = models.TextField()
但我只想有 4 行 15 列。
如果我这样做了,我是否需要重新安装数据库。
【问题讨论】:
标签: django django-models
我有这个模型
summary = models.TextField()
但我只想有 4 行 15 列。
如果我这样做了,我是否需要重新安装数据库。
【问题讨论】:
标签: django django-models
TextField 是一种字段,当 ModelForm 使用它时,默认使用 Textarea 小部件。 Fields 处理后端存储,widgets 处理前端编辑。
因此,您需要指定要与您的字段一起使用的小部件。您想创建一个ModelForm 并指定您要使用的widget,每个the documentation:
from django import forms
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
widgets = {
'summary': forms.Textarea(attrs={'rows':4, 'cols':15}),
}
【讨论】:
MyForm 类缺少冒号 (:),如果没有明确引用 Meta 中的字段,它在 Django 1.8 中不起作用(请参阅this question)
这里是将 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']
希望这可以帮助那些寻找特定表格的人
【讨论】:
如果您使用 django-crispy-forms,在您的 __init__() 函数中,您可以像这样访问小部件属性:
self.fields['summary'].widget.attrs['rows'] = 4
self.fields['summary'].widget.attrs['columns'] = 15
我想您可以在非脆形式 ModelForm 中以这种方式设置 attrs,但您也可以在小部件定义中执行此操作,如上所示。我刚找到这篇文章,并想分享一下我是如何使用crispyforms 做到的。
【讨论】:
你也可以像下面这样使用jQuery:
$(document).ready(function(){
$("textarea").attr({"rows": "4",
"cols": "15"
});
});
【讨论】:
django-widget-tweaks 包使这变得非常简单。在您的模板中:
{% load widget_tweaks %}
...
{{ mytextareafield|attr:"rows:3" }}
【讨论】:
首先,您必须使用以下方法安装 django 小部件调整:
pip install django-widget-tweaks
然后您必须转到 setting.py 并将“widget_tweaks”添加到已安装的应用中,如下所示:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'widget_tweaks',
)
然后转到您的 html 模板并将其替换为 {{ field }},以调整您的文本字段的大小:
{% load widget_tweaks %}
{{ mytextareafield|attr:"rows:4" | "cols:30" }}
【讨论】:
在 Meta 中使用小部件。 请记住,您还必须在模型表单中添加该字段
class MyModelForm(forms.ModelForm):
address = forms.CharField()
class Meta:
model = MyModel
exclude = ()
widgets = {
address': forms.Textarea(attrs={'rows':1, 'cols':15}),
}
【讨论】:
第一个答案可能是该问题的正确答案,但 django-widget-tweaks 包也是更改更多属性的绝佳选择,例如设置特定的 CSS 类。
因此,如果您想轻松更改其他属性,请考虑该选项。
【讨论】: