在Django Admin中,如何隐藏保存并继续并保存并在模型管理员上添加其他按钮



我在Django管理员中具有与用户工作流非常相似的模型的工作流程。首先,我有一个带有基本字段的表格,然后是其余数据的第二个形式。

它与auth.user

是相同的工作流程

我需要删除"保存并继续"并"保存并添加另一个"按钮以防止用户破坏工作流程。

我试图将其添加为Extra_context:

extra_context = {
  'show_save_and_add_another': False,
  'show_save_and_continue': False
}

并将其通过modelAdmin.add_view或modelAdmin.change_view,但不起作用。

这仅适用于一种型号,所以我不想从submit_line.html

删除

有任何线索或替代方法?

预先感谢

在其(有点尴尬的)黑客风格旁边,您可以直接覆盖模板标签。通常建议使用覆盖模板。

# put this in some app such as customize/templatetags/admin_modify.py and place the app
# before the 'django.contrib.admin' in the INSTALLED_APPS in settings
from django.contrib.admin.templatetags.admin_modify import *
from django.contrib.admin.templatetags.admin_modify import submit_row as original_submit_row
# or 
# original_submit_row = submit_row
@register.inclusion_tag('admin/submit_line.html', takes_context=True)
def submit_row(context):
    ctx = original_submit_row(context)
    ctx.update({
        'show_save_and_add_another': context.get('show_save_and_add_another', ctx['show_save_and_add_another']),
        'show_save_and_continue': context.get('show_save_and_continue', ctx['show_save_and_continue'])
        })                                                                  
    return ctx 

,据我所知,这是不可能的,但这就是我要做您想做的事情的方式。p>我们关心的代码是此templateTag-无论您设置什么,这似乎都覆盖了show_save_and_add_anothershow_save_and_continue。它还创建了一个全新的上下文,并仅复制跨越某些值(不清楚这是什么理由),因此您必须对其进行修改以获得所需的东西。

so:

  1. 创建一个templateTag,通过重复使用现有标签(请参阅OKM的示例)或通过完全重复它来复制默认标签的功能。这里唯一的更改是,它应该在不覆盖它的情况下将show_save_and_add_another远离原始上下文,或者通过您自己的really_hide_save_and_add_another_damnit上下文变量。
  2. 替换thats_form.html以包括并使用自己的templateTag,用它代替 submit_row
  3. Update Change_form.html如果您选择了使用额外的上下文变量的选项,请用其他条件语句包装按钮。

然后,无论您选择哪种选项,都可以使用类似的内容来更新模型,以下内容(基于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)

更新:原始响应没有以说明cumbs_row不符合任何原始上下文。

一种截然不同的方法是在/static/admin/css/base.css

input[name="_addanother"],input[name="_continue"],input[name="_saveasnew"]{
    display: none;
}

删除'保存并继续编辑;按钮"保存并添加另一个"button ,set ; false '>和返回; false' in 'has_add_permission()" 分别:

# "admin.py"
from django.contrib import admin
from .models import MyModel
@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
        extra_context = extra_context or {}
        extra_context['show_save_and_continue'] = False # Here
        return super().changeform_view(request, object_id, form_url, extra_context)
    def has_add_permission(self, request, obj=None): # Here
        return False

最新更新