首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Django Admin中调整字段大小

在Django Admin中调整字段大小
EN

Stack Overflow用户
提问于 2009-05-26 11:16:16
回答 12查看 70.6K关注 0票数 121

Django在admin上添加或编辑条目时往往会填满水平空间,但在某些情况下,当编辑8个字符宽的日期字段或6或8个字符宽的CharField时,编辑框将达到15或20个字符,这是真正的空间浪费。

我如何告诉管理员文本框应该有多宽,或者TextField编辑框的高度?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2009-11-17 03:24:47

您应该使用ModelAdmin.formfield_overrides

这非常简单-在admin.py中,定义:

代码语言:javascript
复制
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)
票数 235
EN

Stack Overflow用户

发布于 2009-05-26 17:57:49

您可以使用小部件的"attrs" property在小部件上设置任意的超文本标记语言属性。

您可以在Django admin中使用formfield_for_dbfield完成此操作:

代码语言:javascript
复制
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

代码语言:javascript
复制
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}}
票数 45
EN

Stack Overflow用户

发布于 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。

因此,您可以在模板中放入类似以下内容:

代码语言:javascript
复制
{% extends "admin/change_form.html" %}

{% block extrahead %}
  {{ block.super }}
  <style type="text/css">
    #id_my_field { width: 100px; }
  </style>
{% endblock %}
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/910169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档