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!'
然后在ModelAdmin中使用新表单:
class MyModel(admin.ModelAdmin):
     ...
     form = MyForm
这是实现您想要的更清洁的方式,因为表单字段无论如何都属于表单!
在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
另一种方法是将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)
该help_texts关键字被最终传递给modelform_factory方法,并呈现为从Django管理模型中的标准帮助文本。
如果您使用的是InlineModelAdmin,则需要以get_formset相同的方式覆盖。
如果您readonly_fields的 ModelAdmin 子类中有,这也适用。
您始终可以更改 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
        | 归档时间: | 
 | 
| 查看次数: | 6151 次 | 
| 最近记录: |