mirror of https://github.com/django/django.git
Fixed #7758 and #17189 -- Allowed to override the `form_url` context var in the admin change view and the user admin's password change view. Thanks, michal and krzysztof.szczesny.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17466 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
03eeb020a0
commit
b46d90c63a
|
@ -1011,7 +1011,7 @@ class ModelAdmin(BaseModelAdmin):
|
||||||
|
|
||||||
@csrf_protect_m
|
@csrf_protect_m
|
||||||
@transaction.commit_on_success
|
@transaction.commit_on_success
|
||||||
def change_view(self, request, object_id, extra_context=None):
|
def change_view(self, request, object_id, form_url='', extra_context=None):
|
||||||
"The 'change' admin view for this model."
|
"The 'change' admin view for this model."
|
||||||
model = self.model
|
model = self.model
|
||||||
opts = model._meta
|
opts = model._meta
|
||||||
|
@ -1099,7 +1099,7 @@ class ModelAdmin(BaseModelAdmin):
|
||||||
'app_label': opts.app_label,
|
'app_label': opts.app_label,
|
||||||
}
|
}
|
||||||
context.update(extra_context or {})
|
context.update(extra_context or {})
|
||||||
return self.render_change_form(request, context, change=True, obj=obj)
|
return self.render_change_form(request, context, change=True, obj=obj, form_url=form_url)
|
||||||
|
|
||||||
@csrf_protect_m
|
@csrf_protect_m
|
||||||
def changelist_view(self, request, extra_context=None):
|
def changelist_view(self, request, extra_context=None):
|
||||||
|
|
|
@ -11,6 +11,7 @@ from django.shortcuts import get_object_or_404
|
||||||
from django.template.response import TemplateResponse
|
from django.template.response import TemplateResponse
|
||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
from django.utils.decorators import method_decorator
|
from django.utils.decorators import method_decorator
|
||||||
|
from django.utils.safestring import mark_safe
|
||||||
from django.utils.translation import ugettext, ugettext_lazy as _
|
from django.utils.translation import ugettext, ugettext_lazy as _
|
||||||
from django.views.decorators.csrf import csrf_protect
|
from django.views.decorators.csrf import csrf_protect
|
||||||
from django.views.decorators.debug import sensitive_post_parameters
|
from django.views.decorators.debug import sensitive_post_parameters
|
||||||
|
@ -113,7 +114,7 @@ class UserAdmin(admin.ModelAdmin):
|
||||||
extra_context)
|
extra_context)
|
||||||
|
|
||||||
@sensitive_post_parameters()
|
@sensitive_post_parameters()
|
||||||
def user_change_password(self, request, id):
|
def user_change_password(self, request, id, form_url=''):
|
||||||
if not self.has_change_permission(request):
|
if not self.has_change_permission(request):
|
||||||
raise PermissionDenied
|
raise PermissionDenied
|
||||||
user = get_object_or_404(self.model, pk=id)
|
user = get_object_or_404(self.model, pk=id)
|
||||||
|
@ -133,6 +134,7 @@ class UserAdmin(admin.ModelAdmin):
|
||||||
context = {
|
context = {
|
||||||
'title': _('Change password: %s') % escape(user.username),
|
'title': _('Change password: %s') % escape(user.username),
|
||||||
'adminForm': adminForm,
|
'adminForm': adminForm,
|
||||||
|
'form_url': mark_safe(form_url),
|
||||||
'form': form,
|
'form': form,
|
||||||
'is_popup': '_popup' in request.REQUEST,
|
'is_popup': '_popup' in request.REQUEST,
|
||||||
'add': True,
|
'add': True,
|
||||||
|
|
|
@ -574,6 +574,25 @@ class AdminViewBasicTest(TestCase):
|
||||||
self.fail("Filters should be allowed if they are defined on a ForeignKey pointing to this model")
|
self.fail("Filters should be allowed if they are defined on a ForeignKey pointing to this model")
|
||||||
|
|
||||||
|
|
||||||
|
class AdminViewFormUrlTest(TestCase):
|
||||||
|
urls = "regressiontests.admin_views.urls"
|
||||||
|
fixtures = ["admin-views-users.xml"]
|
||||||
|
urlbit = "admin3"
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.client.login(username='super', password='secret')
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
self.client.logout()
|
||||||
|
|
||||||
|
def testChangeFormUrlHasCorrectValue(self):
|
||||||
|
"""
|
||||||
|
Tests whether change_view has form_url in request.context
|
||||||
|
"""
|
||||||
|
response = self.client.get('/test_admin/%s/admin_views/section/1/' % self.urlbit)
|
||||||
|
self.assertTrue('form_url' in response.context, msg='form_url not present in response.context')
|
||||||
|
self.assertEqual(response.context['form_url'], 'pony')
|
||||||
|
|
||||||
class AdminJavaScriptTest(AdminViewBasicTest):
|
class AdminJavaScriptTest(AdminViewBasicTest):
|
||||||
urls = "regressiontests.admin_views.urls"
|
urls = "regressiontests.admin_views.urls"
|
||||||
|
|
||||||
|
@ -3054,6 +3073,12 @@ class UserAdminTest(TestCase):
|
||||||
response = self.client.get('/test_admin/admin/auth/user/%s/' % u.pk)
|
response = self.client.get('/test_admin/admin/auth/user/%s/' % u.pk)
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
|
def test_form_url_present_in_context(self):
|
||||||
|
u = User.objects.all()[0]
|
||||||
|
response = self.client.get('/test_admin/admin3/auth/user/%s/password/' % u.pk)
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertEqual(response.context['form_url'], 'pony')
|
||||||
|
|
||||||
|
|
||||||
class GroupAdminTest(TestCase):
|
class GroupAdminTest(TestCase):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -10,4 +10,5 @@ urlpatterns = patterns('',
|
||||||
(r'^test_admin/admin/secure-view/$', views.secure_view),
|
(r'^test_admin/admin/secure-view/$', views.secure_view),
|
||||||
(r'^test_admin/admin/', include(admin.site.urls)),
|
(r'^test_admin/admin/', include(admin.site.urls)),
|
||||||
(r'^test_admin/admin2/', include(customadmin.site.urls)),
|
(r'^test_admin/admin2/', include(customadmin.site.urls)),
|
||||||
|
(r'^test_admin/admin3/', include(admin.site.urls), dict(form_url='pony')),
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue