Author: jezdez
Date: 2012-02-09 10:56:32 -0800 (Thu, 09 Feb 2012)
New Revision: 17466

Modified:
   django/trunk/django/contrib/admin/options.py
   django/trunk/django/contrib/auth/admin.py
   django/trunk/tests/regressiontests/admin_views/tests.py
   django/trunk/tests/regressiontests/admin_views/urls.py
Log:
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.

Modified: django/trunk/django/contrib/admin/options.py
===================================================================
--- django/trunk/django/contrib/admin/options.py        2012-02-09 18:56:23 UTC 
(rev 17465)
+++ django/trunk/django/contrib/admin/options.py        2012-02-09 18:56:32 UTC 
(rev 17466)
@@ -1011,7 +1011,7 @@
 
     @csrf_protect_m
     @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."
         model = self.model
         opts = model._meta
@@ -1099,7 +1099,7 @@
             'app_label': opts.app_label,
         }
         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
     def changelist_view(self, request, extra_context=None):

Modified: django/trunk/django/contrib/auth/admin.py
===================================================================
--- django/trunk/django/contrib/auth/admin.py   2012-02-09 18:56:23 UTC (rev 
17465)
+++ django/trunk/django/contrib/auth/admin.py   2012-02-09 18:56:32 UTC (rev 
17466)
@@ -11,6 +11,7 @@
 from django.template.response import TemplateResponse
 from django.utils.html import escape
 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.views.decorators.csrf import csrf_protect
 from django.views.decorators.debug import sensitive_post_parameters
@@ -113,7 +114,7 @@
                                                extra_context)
 
     @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):
             raise PermissionDenied
         user = get_object_or_404(self.model, pk=id)
@@ -133,6 +134,7 @@
         context = {
             'title': _('Change password: %s') % escape(user.username),
             'adminForm': adminForm,
+            'form_url': mark_safe(form_url),
             'form': form,
             'is_popup': '_popup' in request.REQUEST,
             'add': True,

Modified: django/trunk/tests/regressiontests/admin_views/tests.py
===================================================================
--- django/trunk/tests/regressiontests/admin_views/tests.py     2012-02-09 
18:56:23 UTC (rev 17465)
+++ django/trunk/tests/regressiontests/admin_views/tests.py     2012-02-09 
18:56:32 UTC (rev 17466)
@@ -574,6 +574,25 @@
             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):
     urls = "regressiontests.admin_views.urls"
 
@@ -3054,7 +3073,13 @@
             response = self.client.get('/test_admin/admin/auth/user/%s/' % 
u.pk)
             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):
     """
     Tests group CRUD functionality.

Modified: django/trunk/tests/regressiontests/admin_views/urls.py
===================================================================
--- django/trunk/tests/regressiontests/admin_views/urls.py      2012-02-09 
18:56:23 UTC (rev 17465)
+++ django/trunk/tests/regressiontests/admin_views/urls.py      2012-02-09 
18:56:32 UTC (rev 17466)
@@ -10,4 +10,5 @@
     (r'^test_admin/admin/secure-view/$', views.secure_view),
     (r'^test_admin/admin/', include(admin.site.urls)),
     (r'^test_admin/admin2/', include(customadmin.site.urls)),
+    (r'^test_admin/admin3/', include(admin.site.urls), dict(form_url='pony')),
 )

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to