Reputation: 31548
I have this Model
summary = models.TextField()
But I want to have only 4 rows and 15 columns.
Also if I do that do I need to install database again or not.
Upvotes: 70
Views: 72152
Reputation: 36290
Here is the form specific equivalent for changing the rows/cols attribute to a textarea. Use the forms.Textarea widget and set attrs dictionary values:
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']
Hope this helps those looking for form specific
Upvotes: 28
Reputation: 2419
Use Widget in Meta. Keep in Mind that you must add that field in modelform also
class MyModelForm(forms.ModelForm):
address = forms.CharField()
class Meta:
model = MyModel
exclude = ()
widgets = {
address': forms.Textarea(attrs={'rows':1, 'cols':15}),
}
Upvotes: 2
Reputation: 171
If you're using django-crispy-forms, in your __init__()
function you can access the widget attrs like so:
self.fields['summary'].widget.attrs['rows'] = 4
self.fields['summary'].widget.attrs['columns'] = 15
I suppose you could set the attrs this way it in a non crispy-form ModelForm, but you may as well do it in your widget definition, as shown above. I just found this post and thought I'd share how I did it with crispyforms.
Upvotes: 17
Reputation: 99771
TextField
is a type of field, which when used by a ModelForm
by default uses the Textarea
widget. Fields deal with backend storage, widgets with front-end editing.
So you need to specify the widget you want to go with your field. You want to create a ModelForm
and specify the widget
you want to use, per the documentation:
from django import forms
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
widgets = {
'summary': forms.Textarea(attrs={'rows':4, 'cols':15}),
}
Upvotes: 149
Reputation: 943
First you have to install django widget tweaks by using:
pip install django-widget-tweaks
Then you have to go to setting.py and add 'widget_tweaks' to installed apps like this:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'widget_tweaks',
)
Then go to your html template and replace this with {{ field }}, to resize your text field:
{% load widget_tweaks %}
{{ mytextareafield|attr:"rows:4" | "cols:30" }}
Upvotes: 3
Reputation: 415
You can also use jQuery as follows:
$(document).ready(function(){
$("textarea").attr({"rows": "4",
"cols": "15"
});
});
Upvotes: 5
Reputation: 506
The first answer may be the right one for the question, but the django-widget-tweaks package is also a great option for changing more attributes, for instance set specific CSS class.
So consider that option if you want to alter another attributes easily.
Upvotes: -1
Reputation: 16779
The django-widget-tweaks
package makes this quite simple. In your template:
{% load widget_tweaks %}
...
{{ mytextareafield|attr:"rows:3" }}
Upvotes: 2