Opened 4 years ago

Last modified 16 months ago

#16327 new Bug

"save as new" redirects to list view instead of newly-created item

Reported by: candlerb Owned by: nobody
Component: contrib.admin Version: 1.3
Severity: Normal Keywords: saveasnew
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: no


I have a model with save_as = True

After browsing to the model, changing some parameters and clicking "Save As", the browser redirects to the list of all objects instead of the newly-saved model instance.

There is code in response_change which looks like it is supposed to handle this case. However, after putting in some sys.stderr.write's, I see that the request is actually ending up in response_add instead :-(

The attached one-line patch to django/contrib/admin/ fixes it for me. However I'm not sure if that's right for all circumstances, nor whether the code in response_change which tests for "_saveasnew" is always unused and should also be removed.

Attachments (1)

django-16327.diff (727 bytes) - added by candlerb 4 years ago.

Download all attachments as: .zip

Change History (7)

Changed 4 years ago by candlerb

comment:1 Changed 4 years ago by ramiro

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Triage Stage changed from Unreviewed to Design decision needed
  • Type changed from Bug to Uncategorized

tl;dr: We need to decide if after clicking the 'Save as new' in a model change view the user should be taken to the changelist like we are doing or to the change view of the model instance just cloned as the OP proposes.

The behavior of redirecting to the model changelist (or the admin app index page) has been so since newforms admin was merged back in r7967 (with later fixups like the ones in #10448/r10713). And yes, AFAICT the code block in ModelAdmin.response_change() that supposedly handles this has been dead code since its introduction in r8273.

See also #8001.

Last edited 4 years ago by ramiro (previous) (diff)

comment:2 Changed 4 years ago by candlerb

The use case is to be able to make multiple clones of an existing model, each slightly different. It's painful if you have to keep re-locating the just-saved model in the changelist.

"continue editing" is arguably orthogonal to "save / save as new" - but I don't want four buttons :-)

Suggestion: permit _continue as a separate form field. That is, the posted data could contain both _saveasnew and _continue. You could then add _continue as a hidden field (for fixed behaviour) or a checkbox.

For this to work, we just need to ensure that both flags are honoured if they are both present in the view code. It should be backwards-compatible, since _continue can also be a submit button.

I would like to be able to control this from the ModelAdmin without having to write my own submit_line though. e.g.

save_as = True
continue_editing = False / True / 'ask' # ???

comment:3 Changed 3 years ago by aaugustin

  • Type changed from Uncategorized to Bug

comment:4 Changed 3 years ago by jacob

  • Triage Stage changed from Design decision needed to Accepted

comment:5 Changed 22 months ago by ste@…

This is still a problem with 1.6.1. I agree with candlerb - the 'save as' feature is useful for quickly hammering out lists of objects where only 1 or 2 (of many) fields change each time.

I think ModelAdmin.continue_after_save_as = False would probably be the best way to achieve this. It wouldn't break backwards compatibility. If anyone else thinks this is a good idea, I can hack up a patch.

comment:6 Changed 16 months ago by timgraham

  • Patch needs improvement set

I think changing "Save as new" to redirect to the newly created object is probably okay, but someone might complain. If we have to add ModelAdmin.save_as_continue (I'd prefer that name so it's in the docs next to save_as) then that seems reasonable. Simply adding a fourth "Save as new and continue editing" button (if save_as = True) might be fine as well. Whatever happens, I hope we can keep the solution as simple as possible.

Note: See TracTickets for help on using tickets.
Back to Top