добавление текста справки в поле только для чтения в представлении администратора django


Ниже приведен мой вид администратора:

@admin.register(AuditStashAwsMasterPolicies)
class AuditPoliciesAdmin(reversion.VersionAdmin):
exclude = ['source_policy_path', 'source_state', 'target_state']
readonly_fields = ['comparison_date', 'source', 'source_policy_name', 'target', 'target_policy_name',
                   'target_policy_path', 'policy_difference']

def policy_difference(self, instance):
    return drift.compare_two_policies(instance.source, instance.source_policy_name, instance.source_policy_path,
                                instance.target, instance.target_policy_name, instance.target_policy_path)

Что я хочу сделать, так это добавить текст справки в мое поле "policy_difference" только для чтения. Из справочной документации я могу сделать это только путем изменения модели и создания поля только для чтения с текстом справки.

Дело в том, что я не храню значения в поле 'policy_difference', я просто генерирую его на лету и хотел бы избежать его хранения в модели.

Есть ли способ добавить текст в 'policy_difference' поле только для чтения без изменения модели AuditStashAwsMasterPolicies?

1 2

1 ответ:

Вы можете достичь этого, переопределив get_form метод такой:

def get_form(self, request, obj=None, **kwargs):
    help_texts = {'policy_difference': 'Help text explaining policy difference'}
    kwargs.update({'help_texts': help_texts})
    return super(AuditPoliciesAdmin, self).get_form(request, obj, **kwargs)

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

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