Согласно этому ответу: 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
объектом, рассматриваемым для каждого из встроенных строк в стеке.