Как переопределить help_text в интерфейсе администратора django

6

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

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

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

Теги:
django-admin

5 ответов

12

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

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

  • 1
    Как ни странно, это не работает с editable=False полями. Они даже не появляются в form.fields ...
  • 0
    Здравствуйте @Cerin, да, вы правы, поля только для чтения всегда исключаются из форм модели администратора. Они не только для чтения / отключены для ввода формы или чего-то в этом роде, это просто str repr поля модели или метода.
4

В 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
  • 0
    Это полезный и быстрый способ сделать это!
1

Керин прав, но его код не работает (по крайней мере, с 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

Вам нужно будет изменить строку "author" и help_text в соответствии с вашими потребностями.

0

Вы всегда можете изменить атрибуты поля формы в конструкторе 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
  • 0
    Не работает, насколько я вижу - ModelAdmin.fields - это просто список строк: docs.djangoproject.com/en/dev/ref/contrib/admin/…
  • 0
    К сожалению! На самом деле, поля будут доступны через атрибут формы ModelAdmin. Также убедитесь, что родительский конструктор вызывается первым. Смотрите редактировать.
Показать ещё 2 комментария
-2

Попробуйте это (возможно, потребуется заменить 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' 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню