我设法用两种不同的方式覆盖django管理界面中TextArea
Widget的外观:
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>
这是一个screentshot:
根据W3C referecnce for text area:
textarea的大小也可以通过CSS高度和宽度属性指定。
所以,我的问题是:
答案 0 :(得分:32)
这是特定于浏览器的问题。
根据帖子Height of textarea does not match the rows in Firefox:
Firefox总是在文本字段后添加一行。如果你想要的话 要有一个恒定的高度,请使用CSS ...
您可以设置textarea的style
属性:
from django.db import models
from django.forms import Textarea
class RulesAdmin(admin.ModelAdmin):
formfield_overrides = {
models.TextField: {'widget': Textarea(
attrs={'rows': 1,
'cols': 40,
'style': 'height: 1em;'})},
}
适合我 - 在Firefox v.23和Chrome v.29上测试。
希望有所帮助。