I have a workflow for a model in the Django admin that is very similar to the users\' workflow. First, I have a form with basic fields and then, a second form with the rest
Beside its (a bit awkward) hacking style, you could aslo override the template tag directly. Normally overriding template is more recommended.
# 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
A very different approach can be to add the following in /static/admin/css/base.css
input[name="_addanother"],input[name="_continue"],input[name="_saveasnew"]{
display: none;
}
This isn't possible with an 'out of the box' option as far as I can tell, but this is how I'd go about doing what you want to do.
The bit of code we care about is this templatetag - this seems to override show_save_and_add_another
and show_save_and_continue
regardless of what you have set it to. It also creates a whole new context and copies only certain values across (not clear what the justification for this is), so you'll have to modify it to get what you need.
So:
show_save_and_add_another
from the original context without overwriting it, or pass through your own really_hide_save_and_add_another_damnit
context variable.submit_row
with it.Then, regardless of what option you went for, update your ModelAdmin with something like (based on this from the Django docs):
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)
Updated: Original response didn't take in to account the submit_row not passing along any the whole original context.