Mirage
Mirage

Reputation: 31548

How can i set the size of rows , columns in textField in Django Models

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

Answers (8)

radtek
radtek

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

Nids Barthwal
Nids Barthwal

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

chanchos
chanchos

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

Dominic Rodger
Dominic Rodger

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

Maryam Homayouni
Maryam Homayouni

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

MRR
MRR

Reputation: 415

You can also use jQuery as follows:

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

Upvotes: 5

javinievas
javinievas

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

mgalgs
mgalgs

Reputation: 16779

The django-widget-tweaks package makes this quite simple. In your template:

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

Upvotes: 2

Related Questions