在django admin中控制TextArea小部件的大小

Oz1*_*123 32 css python django django-admin

我设法TextArea用两种不同的方式覆盖django管理界面中Widget 的外观:

使用formfield_overrides

admin.py:

class RulesAdmin(admin.ModelAdmin):
formfield_overrides = {
    models.TextField: {'widget': Textarea(
                       attrs={'rows': 1,
                              'cols': 40})},
}

...
admin.site.register(Rules, RulesAdmin)
Run Code Online (Sandbox Code Playgroud)

这种方式有点过分,因为它会改变该模型的所有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}),
   }
Run Code Online (Sandbox Code Playgroud)

admin.py

from AppName.forms import RulesModelForm

class RulesAdmin(admin.ModelAdmin):

    form = RulesModelForm
Run Code Online (Sandbox Code Playgroud)

这两种解决方案调整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>
Run Code Online (Sandbox Code Playgroud)

这是一个screentshot:

形成

根据W3C对文本区的引用:

textarea的大小也可以通过CSS高度和宽度属性指定.

所以,我的问题是:

  • django自己的css主题是否负责这个小部件的"奇怪"行为?
  • 有人可以提出解决这个问题的方法吗?

ale*_*cxe 34

这是特定于浏览器的问题.

根据线程高度textarea与Firefox中的行不匹配:

Firefox总是在文本字段后添加一行.如果你想让它有一个恒定的高度,使用CSS ...

您可以设置styletextarea 的属性:

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;'})},
    }
Run Code Online (Sandbox Code Playgroud)

适用于我 - 在Firefox v.23和Chrome v.29上测试过.

希望有所帮助.

  • 感谢`formfield_overrides`,不知道这个功能=) (2认同)