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

DjangoDjango Models

Django Problem Overview


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.

Django Solutions


Solution 1 - Django

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

Solution 2 - Django

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

Solution 3 - Django

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.

Solution 4 - Django

You can also use jQuery as follows:

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

Solution 5 - Django

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

Solution 6 - Django

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

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

Solution 7 - Django

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

Solution 8 - Django

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMirageView Question on Stackoverflow
Solution 1 - DjangoDominic RodgerView Answer on Stackoverflow
Solution 2 - DjangoradtekView Answer on Stackoverflow
Solution 3 - DjangochanchosView Answer on Stackoverflow
Solution 4 - DjangoMRRView Answer on Stackoverflow
Solution 5 - DjangoMaryam HomayouniView Answer on Stackoverflow
Solution 6 - DjangomgalgsView Answer on Stackoverflow
Solution 7 - DjangoNids BarthwalView Answer on Stackoverflow
Solution 8 - DjangojavinievasView Answer on Stackoverflow