Django在admin上添加或编辑条目时往往会填满水平空间,但在某些情况下,当编辑8个字符宽的日期字段或6或8个字符宽的CharField时,编辑框将达到15或20个字符,这是真正的空间浪费。
我如何告诉管理员文本框应该有多宽,或者TextField编辑框的高度?
发布于 2009-11-17 03:24:47
您应该使用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)
发布于 2009-05-26 17:57:49
您可以使用小部件的"attrs" property在小部件上设置任意的超文本标记语言属性。
您可以在Django admin中使用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 dictionary
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}}
发布于 2009-05-26 20:45:01
一种快速而棘手的选择是简单地为所讨论的模型提供自定义模板。
如果您创建了一个名为admin/<app label>/<class name>/change_form.html
的模板,那么管理员将使用该模板而不是默认模板。也就是说,如果在名为people
的应用程序中有一个名为Person
的模型,则需要创建一个名为admin/people/person/change_form.html
的模板。
所有的管理模板都有一个extrahead
块,您可以覆盖它来将内容放在<head>
中,最后一个难题是每个字段都有一个id_<field-name>
的HTML。
因此,您可以在模板中放入类似以下内容:
{% extends "admin/change_form.html" %}
{% block extrahead %}
{{ block.super }}
<style type="text/css">
#id_my_field { width: 100px; }
</style>
{% endblock %}
https://stackoverflow.com/questions/910169
复制相似问题