我已经为我的模型定义了一个自定义的管理操作,它可以按预期完美工作。我还着眼于在SO上添加一个按钮到管理变更页面的多种方式。只有我缺少的步骤是如何使更改页面中的按钮执行我的自定义管理操作与当前对象。Django:如何将自定义按钮添加到管理更改执行管理操作的表单页面?
目标是允许管理员单独检查每个对象并对它们执行操作,而无需返回列表视图,选择检查对象并从列表中执行操作。
我定制的管理操作是这样的:
def admin_apply_change(modeladmin, request, queryset):
# loop over objects in query set and perform action
我假设有调用管理变化的形式这个动作,其中queryset
将只包含简单和干净的方式当前打开的对象管理员正在看。
注意:如果按钮是在变化形式的底部,旁边Save
按钮,而不是在顶部History
是这是不是很明显这将是preferrable。
解决方案
为解决一看便知通过Remi。为了使其发挥作用需要以下更正:
1:在response_change
初始化一些变量的覆盖丢失:
opts = self.model._meta
pk_value = obj._get_pk_val()
preserved_filters = self.get_preserved_filters(request)
2:新的包含标签custom_submit_row
应放置在templatetags而不是在管理员(请参阅docs for custom templatetags)
3:这是您可能会放松一段时间的疏忽。在change_form.html
你不仅要更改建议的行:
{% if save_on_top %}{% block submit_buttons_top %}{% submit_row %}{% endblock %}{% endif %}
而且在底部更重要的线,其中submit_row
出现:
{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}
(它正好位于change_form.html
的JavaScript块以上)
谢谢。这解决了我的问题以及一些小的更正。在我的问题更新中看到它们。如果您可以更新您的答案以纳入这些更正,那将会很好。 – dsalaj