Управление размером с виджетами TextArea в django admin

Мне удалось переопределить внешний вид виджета TextArea в интерфейсе администратора django двумя разными способами:

используя 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 размер 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 для текстовой области :

Размер текстовой области также может быть задан с помощью свойств высоты и ширины CSS.

Итак, мои вопросы:

  • Собственная тема django css отвечает за «странное» поведение этого виджета?
  • Могут ли некоторые предложить способ решить эту проблему?

Это проблема, зависящая от браузера.

Согласно потоку Высота textarea не соответствует строкам в Firefox :

Firefox всегда добавляет дополнительную строку после текстового поля. Если вы хотите, чтобы он имел постоянную высоту, используйте CSS …

Вы можете установить атрибут стиля в textarea:

 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 против 29.

Надеюсь, это поможет.