如何在Django管理员中右对齐只读字段?

时间:2013-01-24 09:16:25

标签: django django-admin

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

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但是它的问题与我的不同,我认为......

1 个答案:

答案 0 :(得分:3)

为什么不使用css?定义一个/admin/base.html模板,在其中加载指定的自定义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;
}

我认为为演示文稿问题编写自定义过滤器是一种难以理解的过度杀戮,您将来可能会感到遗憾,您确定这是最好的方法吗?