据我所知,使用“开箱即用”选项是不可能的,但这就是我将如何去做你想做的事情。
我们关心的代码位是这个模板标签——这似乎会覆盖show_save_and_add_another
并且show_save_and_continue
不管你将它设置为什么。它还创建了一个全新的上下文并仅复制某些值(不清楚这样做的理由是什么),因此您必须对其进行修改以获得所需的内容。
所以:
- 创建一个模板标签来复制默认标签的功能,或者通过重用现有标签(参见okm 的示例)或完全复制它。这里唯一的变化是它应该让你
show_save_and_add_another
远离原始上下文而不覆盖它,或者传递你自己的really_hide_save_and_add_another_damnit
上下文变量。
- 替换 change_form.html 以包含并使用您自己的模板标签,并替换
submit_row
为它。
- 如果您选择使用额外的上下文变量,则更新 change_form.html,用另一个条件语句包装按钮。
然后,无论您选择什么选项,都使用以下内容更新您的 ModelAdmin(基于Django 文档中的此内容):
class MyModelAdmin(admin.ModelAdmin):
# ...
def change_view(self, request, object_id, form_url='', extra_context=None):
extra_context = extra_context or {}
extra_context['show_save_and_add_another'] = False
# or
extra_context['really_hide_save_and_add_another_damnit'] = True
return super(MyModelAdmin, self).change_view(request, object_id,
form_url, extra_context=extra_context)
更新:原始响应没有考虑到 submit_row 没有传递任何整个原始上下文。