【发布时间】:2013-09-15 07:38:06
【问题描述】:
我设法用两种不同的方式覆盖了 django 管理界面中 TextArea 小部件的外观:
使用 formfield_overrides
在admin.py:
class RulesAdmin(admin.ModelAdmin):
formfield_overrides = {
models.TextField: {'widget': Textarea(
attrs={'rows': 1,
'cols': 40})},
}
...
admin.site.register(Rules, RulesAdmin)
这种方式有点矫枉过正,因为它会改变所有的 TextField 型号。
使用自定义表单:
在forms.py:
from django.forms import ModelForm, Textarea
from TimePortal.models import Rules
class RulesModelForm(ModelForm):
class Meta:
model = Rules
widgets = {
'parameters': Textarea(attrs={'cols': 30, 'rows': 1}),
}
在admin.py
from AppName.forms import RulesModelForm
class RulesAdmin(admin.ModelAdmin):
form = RulesModelForm
两种解决方案都会调整 TextArea 的大小。然而,在这两种解决方案中的实际大小
文本区域超过 1 行(实际上是 2 行)。以下是呈现的 HTML 的样子:
<div class="form-row field-parameters">
<div>
<label for="id_parameters" class="required">Parameters:</label>
<textarea id="id_parameters" rows="1" cols="30" name="parameters">{}</textarea>
<p class="help">Enter a valid Python Dictionary</p>
</div>
</div>
这是一个截图:
根据W3C referecnce for text area:
文本区域的大小也可以通过 CSS 的 height 和 width 属性来指定。
所以,我的问题是:
- 是django自己的css主题负责这里的“奇数” 这个小部件的行为?
- 能否提出解决此问题的方法?
【问题讨论】:
-
我已经测试了你的代码,它确实有效,向我展示了一个带有 1 个可见行的文本区域,呈现为
<textarea cols="40" id="my_id" name="my_field" rows="1">...</textarea>。可能这是浏览器特有的东西吗?
标签: python css django django-admin