web-dev-qa-db-fra.com

Comment puis-je définir la taille des lignes, des colonnes dans textField dans les modèles Django

J'ai ce modèle

summary         = models.TextField()

Mais je veux avoir seulement 4 lignes et 15 colonnes.

Aussi, si je le fais, dois-je réinstaller la base de données ou non?.

34
Mirage

TextField est un type de champ qui, utilisé par défaut par ModelForm, utilise le widget Textarea. Les champs traitent du stockage principal, des widgets de l'édition frontale.

Vous devez donc spécifier le widget que vous souhaitez utiliser avec votre champ. Vous voulez créer une ModelForm et spécifier la widget que vous voulez utiliser, par la documentation :

from Django import forms

class MyForm(forms.ModelForm):
    class Meta:
        model = MyModel
        widgets = {
          'summary': forms.Textarea(attrs={'rows':4, 'cols':15}),
        }
95
Dominic Rodger

Voici l'équivalent spécifique au formulaire pour changer l'attribut rows/cols en textarea. Utilisez le widget forms.Textarea et définissez les valeurs du dictionnaire attrs:

class LocationForm(forms.ModelForm):

    auto_email_list = forms.CharField(required=False, widget=forms.Textarea(attrs={'rows': 2, 'cols': 40}))
    notes = forms.CharField(required=False, widget=forms.Textarea(attrs={'rows': 4, 'cols': 40}))

    class Meta:
        model = Location
        exclude = ['id']

J'espère que cela aidera ceux qui recherchent une forme spécifique 

15
radtek

Si vous utilisez Django-crispy-forms, dans votre fonction __init__(), vous pouvez accéder aux attributs du widget de la manière suivante:

self.fields['summary'].widget.attrs['rows'] = 4
self.fields['summary'].widget.attrs['columns'] = 15

Je suppose que vous pouvez définir les attributs de cette façon dans un objet ModelForm non crispy, mais vous pouvez également le faire dans la définition de votre widget, comme indiqué ci-dessus. Je viens de trouver ce post et je pensais partager comment je l'avais fait avec crispyforms.

9
chanchos

Vous pouvez également utiliser jQuery comme suit:

 $(document).ready(function(){
    $("textarea").attr({"rows": "4",
                        "cols": "15"
    });
});
4
MRR

Le paquet Django-widget-tweaks rend cela très simple. Dans votre modèle:

{% load widget_tweaks %}
...
{{ mytextareafield|attr:"rows:3" }}
1
mgalgs

La première réponse peut être la bonne pour la question, mais le paquet Django-widget-tweaks est également une excellente option pour modifier davantage d'attributs, par exemple définir une classe CSS spécifique. 

Considérez donc cette option si vous souhaitez modifier facilement d’autres attributs.

0
javinievas

dans votre formulaire.py, ajoutez un widget en tant que formulaire.Textar avec champs 

par exemple :

body = forms.CharField(widget=forms.Textarea(attrs={'rows':4, 'cols':50}))
0
Mohamed Salah Awad

Vous devez d’abord installer les réglages du widget Django en utilisant:

pip install Django-widget-tweaks

Ensuite, vous devez aller à setting.py et ajouter 'widget_tweaks' aux applications installées comme ceci:

INSTALLED_APPS = (
'Django.contrib.auth',
'Django.contrib.contenttypes',
'widget_tweaks',
)

Ensuite, accédez à votre modèle HTML et remplacez-le par {{field}} pour redimensionner votre champ de texte:

{% load widget_tweaks %}
{{ mytextareafield|attr:"rows:4" | "cols:30" }}
0
Maryam Homayouni