【问题标题】:How do I right-align read-only fields in Django admin?如何在 Django admin 中右对齐只读字段?
【发布时间】:2013-01-24 09:16:24
【问题描述】:

我想在我的 Django 应用程序的管理界面中右对齐数字字段。对于“普通”可编辑字段,可以通过为 ModelAdmin 类覆盖 formfield_for_dbfield(self, db_field, **kwargs): 来正常工作:

def formfield_for_dbfield(self, db_field, **kwargs):
    field = super(MyModelAdmin, self).formfield_for_dbfield(db_field, **kwargs)
    if db_field.name in ("total_amount", "total_discount_amount"):
        field.widget.attrs['style'] = 'text-align:right;'
    return field

当一个字段被定义为只读字段时,它会通过此方法并以不同的方式呈现(显然只是作为css样式的段落标签)。

有没有办法右对齐只读字段?我在 SO 上找到了this question,但我认为它的问题与我的不同......

【问题讨论】:

  • 您找到解决问题的方法了吗?
  • @nemesisdesign:是的,我通过“引导”管理员解决了这个问题,并使用了他们的只读输入,这基本上就是你的建议。我已经接受了你的回答,虽然有点晚了......

标签: django django-admin


【解决方案1】:

为什么不直接使用 css?定义一个 /admin/base.html 模板,您可以在其中加载一个自定义 css,该 css 指定:

input[readonly="readonly"]{
    text-align: right
}

如果您需要限制某些只读字段的样式,您仍然可以通过执行以下操作来使用 css:

#my-app fieldset input[readonly="readonly"]{
    text-align: right
}

甚至是特定领域:

#id_total, #id_average, #id_my_readonly_field{
    text-align: right
}

附录

我看到你正在使用 Grappelli,在这种情况下你可以这样做:

.grp-readonly{
    float: right;
}

如果您只需要设置某些只读段落而不是所有段落的样式,您仍然可以使用父元素的 css 类作为 CSS 规则的前缀,通常该类以字段名称命名,因此如果您有一个名为“总计”应该是:

.total .grp-readonly{
    float: right;
}

我认为为演示问题编写自定义过滤器是一种维护过度的行为,您将来可能会后悔,您确定这是最好的方法吗?

【讨论】:

  • 谢谢。我曾考虑过,但只读字段是作为样式段落生成的,而不是作为 html 输入字段。他们也没有设置 HTML id,所以 AFAIK 没有设置样式的选项,而是通过关联的类,然后将所有只读字段设置为右对齐...
  • 我添加了更多注意事项
猜你喜欢
  • 2018-07-28
  • 1970-01-01
  • 2012-02-01
  • 2018-06-03
  • 2012-11-28
  • 2011-07-01
  • 2013-01-27
  • 1970-01-01
  • 2018-11-10
相关资源
最近更新 更多