【问题标题】:hide label in django admin fieldset readonly field在 Django 管理字段集中隐藏标签只读字段
【发布时间】:2013-07-11 22:19:03
【问题描述】:

我有一个非常烦人的问题,如果该字段是只读的,我无法在管理员中隐藏标签:

class Observable(Model):
    constraints=ManyToManyField('Constraint')

class ObservableAdmin(MPTTModelAdmin):

    form=ObservableAdminForm
    fieldsets =[('other fields',{}),
                ('All Constraints...:', {'fields':('constraints',)}),] 
    readonly_fields = ['constraints'] # I want to hide the "Constraints: " label

class ObservableAdminForm(ModelForm):

    class Meta:
    model=Observable
    fields=('parent', 'name', 'alias', 'comments', 'constraints')

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
       # CAN'T DO self.fields['constraints'].label=''

问题是管理员中定义的只读字段根本不会出现在模型表单字段中。

django 管理员正确地将约束显示为逗号分隔的文本块,但它显示的“约束”标签与字段集中的“所有约束...”是多余的。任何人都可以提出解决方法吗?

谢谢, 丹尼

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    我想出了一个真正丑陋的解决方法,可以满足我的需求......

    我修改了 fieldset.html 以包含以下内容:

    {% if field.label_tag != "<label>Constraints:</label>" %}
      {{ field.label_tag }}
    {% endif %}
    

    这样,字段集标签标签不会出现在“约束”字段中,但不受影响。

    不要在家里尝试这个......

    【讨论】:

      【解决方案2】:

      管理表单是在调用 add_view 或 change_view 时从元类动态创建的(请参阅 django/contrib/admin/options.py 中的 adminForm 变量)。

      所以最简单的解决方法是将None 放入字段集的标签中:

      class ObservableAdmin(MPTTModelAdmin):
      
          form=ObservableAdminForm
          fieldsets =[('other fields',{}),
                      (None, {'fields':('constraints',)}),] 
          readonly_fields = ['constraints'] # I want to hide the "Constraints: " label
      

      或者,您可以在模型的字段声明中使用属性verbose_name 设置一个空标签:

      class Observable(Model):
          constraints=ManyToManyField('Constraint', verbose_name='')
      

      但是你不能去掉标签后缀(':'),因为它在代码中是固定的(django/contrib/admin/helpers.py)。

      如果可行,我更喜欢第一种解决方案(如果您想用collapse 隐藏它,则需要为字段集提供适当的标签)。

      【讨论】:

      • 感谢您的回复,但我认为这些回复都不适合我。第一种方法隐藏字段集标签,但仍显示字段的“约束:”标签。这与我想要的完全相反,即隐藏“约束:”标签并显示字段集标签。第二个解决方案做我想要的,除了你提到的“:”,但这里的问题是我需要其他形式的约束。我想我可以更改所有这些中的标签,所以这可能会起作用。
      猜你喜欢
      • 1970-01-01
      • 2014-11-26
      • 2011-10-26
      • 2010-11-29
      • 2011-07-02
      • 2011-07-25
      • 2020-10-17
      • 2023-04-08
      • 2016-01-28
      相关资源
      最近更新 更多