Как переопределить help_text в интерфейсе администратора django - PullRequest
8 голосов
/ 20 апреля 2011

У меня есть несколько сайтов администраторов, поэтому разные пользователи получают разный опыт редактирования объектов в базе данных.Каждый сайт администратора имеет свой набор объектов и разные стили.Все это может быть сделано путем переопределения шаблонов и объектов ModelAdmin.

Я не могу понять, как предоставить разные help_text на разных сайтах.help_text всегда берется прямо из определения поля модели, и, похоже, нет способа его переопределить.

Я что-то упустил или это невозможно?

Ответы [ 6 ]

12 голосов
/ 22 декабря 2012

Вы можете создать новую форму модели и переопределить текст 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

Это более чистый способ достижения того, чего вы хотите, так как поля формы в любом случае принадлежат формам!

5 голосов
/ 11 мая 2016

В 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
1 голос
/ 24 апреля 2018

Альтернативный способ - передать ключевое слово help_texts методу get_form следующим образом:

def get_form(self, request, obj=None, **kwargs):
    help_texts = {'my_field': 'Field explanation'}
    kwargs.update({'help_texts': help_texts})
    return super(FooAdmin, self).get_form(request, obj, **kwargs)

Ключевое слово help_texts в конечном итоге будет передано modelform_factory метод и отображается как стандартный текст справки из модели в администраторе Django.

Если вы используете InlineModelAdmin, вам необходимо переопределить get_formset таким же образом.

Это также работает, если у вас есть readonly_fields в вашем подклассе ModelAdmin.

1 голос
/ 18 октября 2012

Серин прав, но его код не работает (по крайней мере, с Django 1.4).

def get_readonly_fields(self, request, obj):
    try:
        field = [f for f in obj._meta.fields if f.name == 'author']
        if len(field) > 0:
            field = field[0]
            field.help_text = 'some special help text'
    except:
        pass
    return self.readonly_fields

Вам придется изменить «автора» и строку help_text в соответствии со своими потребностями.

0 голосов
/ 26 сентября 2012

Попробуйте это (может потребоваться заменить self.fields на self.form.fields ...)

class PropertyForm(models.ModelAdmin):
    class Meta:
        model = Property
    def __init__(self, *args, **kwargs):
        super(PropertyForm, self).__init__(*args, **kwargs)
        for (key, val) in self.fields.iteritems():
            self.fields[key].help_text = 'what_u_want' 
0 голосов
/ 20 апреля 2011

Вы всегда можете изменить атрибуты поля формы в конструкторе ModelAdmin, например:

    def __init__(self, *args, **kwargs):
        super(ClassName, self).__init__(*args, **kwargs)
        if siteA:
            help_text = "foo"
        else:
            help_text = "bar"
        self.form.fields["field_name"].help_text = help_text
...