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?.
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}),
}
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
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.
Vous pouvez également utiliser jQuery comme suit:
$(document).ready(function(){
$("textarea").attr({"rows": "4",
"cols": "15"
});
});
Le paquet Django-widget-tweaks
rend cela très simple. Dans votre modèle:
{% load widget_tweaks %}
...
{{ mytextareafield|attr:"rows:3" }}
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.
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}))
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" }}