настроить текст справки для экземпляра встроенной модели в администраторе django - PullRequest
1 голос
/ 01 мая 2019

Согласно этому ответу: https://stackoverflow.com/a/50007209 можно настроить help_text поля в администраторе в зависимости от объекта текущей модели, переопределив метод get_form в классе ModelAdmin.

Например, допустим простое приложение с моделями House и Room. Затем RoomAdmin может настроить текст справки для поля size на основе конкретного экземпляра Room:

def get_form(self, request, obj=None, **kwargs):
    if obj:
      help_texts = {'size': get_my_string(obj)}
      kwargs.update({'help_texts': help_texts})
    return super(RoomAdmin, self).get_form(request, obj, **kwargs)

Ключевым моментом здесь является то, что текст справки для size может быть вычислен на основе конкретного obj, который является Room объектом.

Я не могу понять, как добиться того же результата для InlineModelAdmin. В ответе, приведенном выше, упоминается необходимость переопределить get_formset аналогичным образом. Тем не менее, obj, который передается в get_formset, является родительским объектом модели, из которого я не знаю, как настроить текст помощи встроенных строк.

Считайте, что у меня есть HouseAdmin со встроенным стеком в течение Room с, скажем RoomInline. Как применить одну и ту же настройку текста справки поля size для каждой из смежных комнат? Конечно, настройка должна быть индивидуальной для каждого экземпляра Room, как и в случае RoomAdmin.

Переопределение get_formset, как указано в RoomInline, недостаточно:

def get_formset(self, request, obj=None, **kwargs):
    if obj:
      help_texts = {'size': get_my_string(obj)}
      kwargs.update({'help_texts': help_texts})
    return super(RoomInline, self).get_formset(request, obj, **kwargs)

Проблема с этим определением состоит в том, что obj является (родительским) объектом House, а не конкретным Room объектом, рассматриваемым для каждого из встроенных строк в стеке.

...