For example, there is Product
model below:
class Product(models.Model):
name = models.CharField(max_length=50)
description = models.TextField()
price = models.DecimalField(decimal_places=2, max_digits=5)
quantity = models.PositiveSmallIntegerField()
def __str__(self):
return self.name
Then, using formfield_overrides or form below.
formfield_overrides
:
# "admin.py"
from django.contrib import admin
from .models import Product
from django.db import models
from django import forms
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
formfield_overrides = { # Here
models.CharField: {
'widget': forms.TextInput(attrs={'size':'50'})
},
models.TextField: {
'widget': forms.Textarea(attrs={'rows':'1', 'cols':'50'})
},
models.DecimalField: {
'widget': forms.NumberInput(attrs={'style': 'width:50ch'})
},
models.PositiveSmallIntegerField: {
'widget': forms.NumberInput(attrs={'style': 'width:50ch'})
},
}
form
:
# "admin.py"
from django.contrib import admin
from .models import Product
from django.db import models
from django import forms
class ProductForm(forms.ModelForm):
class Meta:
widgets = {
'name': forms.TextInput(attrs={'size':'50'}),
'description': forms.Textarea(attrs={'rows':'1', 'cols':'50'}),
'price' : forms.NumberInput(attrs={
'style': 'width:50ch'
}),
'quantity' : forms.NumberInput(attrs={
'style': 'width:50ch'
})
}
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
form = ProductForm # Here
form
:
# "admin.py"
from django import forms
from django.contrib import admin
from .models import Product
class ProductForm(forms.ModelForm):
name = forms.CharField(
widget=forms.TextInput(attrs={'size':'50'})
)
description = forms.CharField(
widget=forms.Textarea(attrs={'rows':'1', 'cols':'50'})
)
price = forms.DecimalField(
widget=forms.NumberInput(attrs={'style':'width:50ch'})
)
quantity = forms.IntegerField(
widget=forms.NumberInput(attrs={'style':'width:50ch'})
)
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
form = ProductForm # Here
You can change the size of the fields in "Add" and "Change" pages as shown below:


In addition, in this case of only formfield_overrides
, you can change the size of the fields in "Change List" page as shown below:
# "admin.py"
from django.contrib import admin
from .models import Product
from django.db import models
from django import forms
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
list_display = ('name', 'description', 'price', 'quantity')
list_editable = ('name',) # Here
list_display_links = ('description',)
formfield_overrides = { # Here
models.CharField: {
'widget': forms.TextInput(attrs={'size':'50'})
},
models.TextField: {
'widget': forms.Textarea(attrs={'rows':'1', 'cols':'50'})
},
models.DecimalField: {
'widget': forms.NumberInput(attrs={'style': 'width:50ch'})
},
models.PositiveSmallIntegerField: {
'widget': forms.NumberInput(attrs={'style': 'width:50ch'})
},
}
