Contrôle de la taille du widget TextArea dans django admin

j'ai réussi à passer outre l'apparence d'un TextArea Widget dans l'interface d'administration de django avec deux façons différentes:

utilisant formfield_overrides

dans admin.py :

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

...
admin.site.register(Rules, RulesAdmin)

ce chemin est un peu exagéré, car il va changer tout le champ de texte pour que modèle.

avec un formulaire personnalisé:

dans 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}),
   }

in admin.py

from AppName.forms import RulesModelForm

class RulesAdmin(admin.ModelAdmin):

    form = RulesModelForm

les deux solutions redimensionnent le TextArea . Toutefois, dans les deux solutions, la taille réelle de la zone de texte est plus d'une rangée (en fait 2 rangées). Voici à quoi ressemble le HTML rendu:

    <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>

Et voici un screentshot:

Form

selon W3C referencnce pour zone de texte :

la taille d'une textarea peut également être spécifiée par les propriétés CSS hauteur et largeur.

donc, mes questions sont:

  • est le thème css de django." le comportement de ce widget?
  • Peut-On suggérer un moyen de résoudre ce problème?
29
demandé sur alecxe 2013-09-11 14:17:19

1 réponses

il s'agit d'un problème propre au navigateur.

selon le fil hauteur de textarea ne correspond pas aux lignes dans Firefox :

Firefox ajoute toujours une ligne supplémentaire après le champ de texte. Si vous le souhaitez pour avoir une hauteur constante, utilisez CSS ...

vous pouvez définir un attribut style du 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;'})},
    }

Fonctionne pour moi - testé sur Firefox v. 23 et Chrome v. 29.

Espère que ça aide.

31
répondu alecxe 2017-05-23 12:17:57