将帮助文本添加到 django 管理视图中的只读字段

Jus*_*n S 8 django python-2.7 django-modeladmin django-1.7

以下是我的管理视图:

@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)
Run Code Online (Sandbox Code Playgroud)

我想要做的是在我的“policy_difference”只读字段中添加一些帮助文本。从帮助文档中,我只能通过修改模型并在那里创建一个带有帮助文本的只读字段来做到这一点。

问题是我没有在“policy_difference”字段中存储任何值,我只是即时生成它,并希望避免将其存储在模型中。

有什么方法可以在不更改模型 AuditStashAwsMasterPolicies 的情况下将文本添加到“policy_difference”只读字段?

Mil*_*mak 14

您可以通过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)
Run Code Online (Sandbox Code Playgroud)

help_texts关键字被最终传递给modelform_factory方法,并呈现为从Django管理模型中的标准帮助文本。

如果您使用的是InlineModelAdmin,则需要以get_formset相同的方式覆盖。

  • 这太棒了,谢谢!特别是对于“InlineModelAdmin”。 (2认同)