Opened 12 years ago
Closed 12 years ago
#19044 closed Cleanup/optimization (fixed)
Allow get_success_url to access self. object in DeletionMixin
Reported by: | anonymous | Owned by: | Simon Charette |
---|---|---|---|
Component: | Generic views | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Ready for checkin | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | yes | UI/UX: | no |
Description (last modified by )
Let's say I have object with parent set and once object is deleted, browser should be redirected to parent page.
Expected way to work is:
url(r'^object/(?P<pk>\d+)/delete/$', DeleteView.as_view(model=Object, success_url='/parent/%(parent_id)d/'), name='object_delete')
This can be achieved by evaluating success_url first and then deleting object:
class DeletionMixin(object): """ A mixin providing the ability to delete objects """ success_url = None def delete(self, request, *args, **kwargs): self.object = self.get_object() success_url = self.get_success_url() self.object.delete() return HttpResponseRedirect(success_url) # Add support for browsers which only accept GET and POST for now. def post(self, *args, **kwargs): return self.delete(*args, **kwargs) def get_success_url(self): if self.success_url: return self.success_url % self.object.__dict__ else: raise ImproperlyConfigured( "No URL to redirect to. Provide a success_url.")
Attachments (3)
Change History (16)
comment:1 by , 12 years ago
Easy pickings: | set |
---|---|
Needs documentation: | set |
Needs tests: | set |
Summary: | DeletionMixin: allow substitution in success_url → Allow get_success_url to access self. object in DeletionMixin |
Triage Stage: | Unreviewed → Accepted |
Type: | Uncategorized → Cleanup/optimization |
Version: | 1.4 → master |
by , 12 years ago
Attachment: | 19044.diff added |
---|
comment:2 by , 12 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:3 by , 12 years ago
Needs tests: | unset |
---|
comment:4 by , 12 years ago
Needs documentation: | unset |
---|
comment:5 by , 12 years ago
Attached patch doesn't address an issue properly.
Please take a look at pull request - https://github.com/django/django/pull/417
comment:6 by , 12 years ago
Needs tests: | set |
---|---|
Patch needs improvement: | set |
I have no idea why the % dict pattern was chosen - I'd prefer to make the code consistent for now - but not overtly document it.
pull is more complete than the attached patch - not sure if it is the same author - but if not please note the convention of letting one person work on a feature at a time.
Tests are needed - committer could take care of a brief release note
comment:7 by , 12 years ago
Needs tests: | unset |
---|---|
Patch needs improvement: | unset |
Added tests, pull request here: https://github.com/django/django/pull/663/.
comment:8 by , 12 years ago
Triage Stage: | Accepted → Ready for checkin |
---|
comment:9 by , 12 years ago
Description: | modified (diff) |
---|---|
Owner: | changed from | to
Assigning to myself since I'm planning to commit this.
by , 12 years ago
Attachment: | 0001-Fixed-19044-Made-DeletionMixin-interpolate-it-s-suce.patch added |
---|
comment:10 by , 12 years ago
Added a new patch based on nxvl and slurms work with a release note.
Tests were rewritten because they were not failing without the DeletionMixin.delete
fix since self.object.slug
is still accessible after deletion. It's not the case with self.object.id
.
Also fixed some badly indented code while I was there.
comment:11 by , 12 years ago
Triage Stage: | Ready for checkin → Accepted |
---|
Someone else should review the wording of the release note.
by , 12 years ago
Attachment: | 19044.2.diff added |
---|
comment:12 by , 12 years ago
Triage Stage: | Accepted → Ready for checkin |
---|
I've tweaked the release note a bit and also added documentation of this in the docs.
comment:13 by , 12 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
To simplify and clarify a bit:
the get_success_url should be able to see self.object when it is called - and so should happen before the object is deleted.
Seems completely reasonable, and should be backwards compatible.
see https://docs.djangoproject.com/en/dev/internals/contributing/ regarding patch format requirements