Opened 13 years ago
Closed 13 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 , 13 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 , 13 years ago
| Attachment: | 19044.diff added |
|---|
comment:2 by , 13 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
comment:3 by , 13 years ago
| Needs tests: | unset |
|---|
comment:4 by , 13 years ago
| Needs documentation: | unset |
|---|
comment:5 by , 13 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 , 13 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 , 13 years ago
| Needs tests: | unset |
|---|---|
| Patch needs improvement: | unset |
Added tests, pull request here: https://github.com/django/django/pull/663/.
comment:8 by , 13 years ago
| Triage Stage: | Accepted → Ready for checkin |
|---|
comment:9 by , 13 years ago
| Description: | modified (diff) |
|---|---|
| Owner: | changed from to |
Assigning to myself since I'm planning to commit this.
by , 13 years ago
| Attachment: | 0001-Fixed-19044-Made-DeletionMixin-interpolate-it-s-suce.patch added |
|---|
comment:10 by , 13 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 , 13 years ago
| Triage Stage: | Ready for checkin → Accepted |
|---|
Someone else should review the wording of the release note.
by , 13 years ago
| Attachment: | 19044.2.diff added |
|---|
comment:12 by , 13 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 , 13 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