在Django Admin中调整字段大小
Django在管理后台添加或编辑条目时,通常会占用很多横向空间。但是在某些情况下,这样做其实很浪费空间。比如说,当你在编辑一个日期字段时,它只需要8个字符宽,或者一个字符字段也只需要6到8个字符宽,但编辑框却可能扩展到15或20个字符宽。
我该如何告诉管理后台,文本框应该有多宽,或者文本编辑框的高度应该是多少呢?
15 个回答
45
你可以通过一个叫做“attrs”的属性,给一个小部件设置任意的HTML属性。
在Django的后台管理界面中,你可以使用formfield_for_dbfield来做到这一点:
class MyModelAdmin(admin.ModelAdmin):
def formfield_for_dbfield(self, db_field, **kwargs):
field = super(ContentAdmin, self).formfield_for_dbfield(db_field, **kwargs)
if db_field.name == 'somefield':
field.widget.attrs['class'] = 'someclass ' + field.widget.attrs.get('class', '')
return field
或者,你也可以创建一个自定义的小部件子类,并使用一个叫做formfield_overrides的字典来实现:
class DifferentlySizedTextarea(forms.Textarea):
def __init__(self, *args, **kwargs):
attrs = kwargs.setdefault('attrs', {})
attrs.setdefault('cols', 80)
attrs.setdefault('rows', 5)
super(DifferentlySizedTextarea, self).__init__(*args, **kwargs)
class MyModelAdmin(admin.ModelAdmin):
formfield_overrides = { models.TextField: {'widget': DifferentlySizedTextarea}}
46
要改变某个特定字段的宽度。
这是通过 ModelAdmin.get_form 来实现的:
class YourModelAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
form = super(YourModelAdmin, self).get_form(request, obj, **kwargs)
form.base_fields['myfield'].widget.attrs['style'] = 'width: 45em;'
return form
263
你应该使用 ModelAdmin.formfield_overrides。
这非常简单 - 在 admin.py
文件中,定义:
from django.forms import TextInput, Textarea
from django.db import models
class YourModelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.CharField: {'widget': TextInput(attrs={'size':'20'})},
models.TextField: {'widget': Textarea(attrs={'rows':4, 'cols':40})},
}
admin.site.register(YourModel, YourModelAdmin)