1
0
mirror of https://github.com/django/django.git synced 2025-10-31 09:41:08 +00:00

Fixed #19505 -- A more flexible implementation for customizable admin redirect urls.

Work by Julien Phalip.

Refs #8001, #18310, #19505. See also 0b908b92a2.
This commit is contained in:
Julien Phalip
2012-12-22 20:00:08 +01:00
committed by Ramiro Morales
parent 4a71b84266
commit 35d1cd0b28
5 changed files with 144 additions and 174 deletions

View File

@@ -1,7 +1,9 @@
from functools import update_wrapper
from django.contrib import admin
from django.core.urlresolvers import reverse
from django.db import models
from django.http import HttpResponseRedirect
from django.utils.encoding import python_2_unicode_compatible
@@ -49,41 +51,38 @@ class ActionAdmin(admin.ModelAdmin):
) + self.remove_url(view_name)
admin.site.register(Action, ActionAdmin)
class Person(models.Model):
nick = models.CharField(max_length=20)
class PersonAdmin(admin.ModelAdmin):
"""A custom ModelAdmin that customizes the deprecated post_url_continue
argument to response_add()"""
def response_add(self, request, obj, post_url_continue='../%s/continue/',
continue_url=None, add_url=None, hasperm_url=None,
noperm_url=None):
return super(PersonAdmin, self).response_add(request, obj,
post_url_continue,
continue_url, add_url,
hasperm_url, noperm_url)
admin.site.register(Person, PersonAdmin)
class City(models.Model):
name = models.CharField(max_length=20)
class PersonAdmin(admin.ModelAdmin):
class CityAdmin(admin.ModelAdmin):
"""A custom ModelAdmin that redirects to the changelist when the user
presses the 'Save and add another' button when adding a model instance."""
def response_add(self, request, obj,
add_another_url='admin:admin_custom_urls_city_changelist',
**kwargs):
return super(CityAdmin, self).response_add(request, obj,
add_another_url=add_another_url,
**kwargs)
def response_post_save(self, request, obj):
return HttpResponseRedirect(
reverse('admin:admin_custom_urls_person_history', args=[obj.pk]))
admin.site.register(City, CityAdmin)
class Car(models.Model):
name = models.CharField(max_length=20)
class CarAdmin(admin.ModelAdmin):
def response_add(self, request, obj, post_url_continue=None):
return super(CarAdmin, self).response_add(
request, obj, post_url_continue=reverse('admin:admin_custom_urls_car_history', args=[obj.pk]))
class CarDeprecated(models.Model):
""" This class must be removed in Django 1.6 """
name = models.CharField(max_length=20)
class CarDeprecatedAdmin(admin.ModelAdmin):
""" This class must be removed in Django 1.6 """
def response_add(self, request, obj, post_url_continue=None):
return super(CarDeprecatedAdmin, self).response_add(
request, obj, post_url_continue='../%s/history/')
admin.site.register(Action, ActionAdmin)
admin.site.register(Person, PersonAdmin)
admin.site.register(Car, CarAdmin)
admin.site.register(CarDeprecated, CarDeprecatedAdmin)