我已經爲我的模型定義了一個自定義的管理操作,它可以按預期完美工作。我還着眼於在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