如何在django的管理界面中覆盖help_text

Tob*_*oby 9 django django-admin

我有多个管理站点,因此不同的用户可以获得编辑数据库中对象的不同体验.每个管理站点都有一组不同的对象,以及不同的样式.所有这些都可以通过覆盖模板和ModelAdmin对象来完成.

我无法弄清楚如何通过不同的网站提供不同的help_text.help_text总是直接从模型字段定义中获取,似乎没有办法覆盖它.

我错过了什么,或者这是不可能的?

ppe*_*rid 13

您可以创建一个新的模型表单并覆盖那里的help_text:

class MyForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['myfield'].help_text = 'New help text!'
Run Code Online (Sandbox Code Playgroud)

然后在ModelAdmin中使用新表单:

class MyModel(admin.ModelAdmin):
     ...
     form = MyForm
Run Code Online (Sandbox Code Playgroud)

这是实现您想要的更清洁的方式,因为表单字段无论如何都属于表单!


Jam*_*iew 6

在Django 1.9中,类似于下面的内容适用于我

def get_form(self, request, obj=None, **kwargs):
    form = super(MyAdmin, self).get_form(request, obj, **kwargs)
    form.base_fields['my_field'].help_text = """
    Some helpful text
    """
    return form
Run Code Online (Sandbox Code Playgroud)


Mil*_*mak 6

另一种方法是将help_texts关键字传递给get_form方法,如下所示:

def get_form(self, *args, **kwargs):
    help_texts = {'my_field': 'Field explanation'}
    kwargs.update({'help_texts': help_texts})
    return super().get_form(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

help_texts关键字被最终传递给modelform_factory方法,并呈现为从Django管理模型中的标准帮助文本。

如果您使用的是InlineModelAdmin,则需要以get_formset相同的方式覆盖。

如果您readonly_fields的 ModelAdmin 子类中有,这也适用。


Car*_*ano 0

您始终可以更改 ModelAdmin 构造函数中的表单字段属性,例如:

    def __init__(self, *args, **kwargs):
        super(ClassName, self).__init__(*args, **kwargs)
        如果站点A:
            帮助文本 =“foo”
        别的:
            help_text = “栏”
        self.form.fields["field_name"].help_text = help_text