|
16 | 16 | from django.core.urlresolvers import reverse |
17 | 17 | # Register auth models with the admin. |
18 | 18 | from django.contrib import admin |
| 19 | +from django.contrib.admin.exceptions import DisallowedModelAdminToField |
19 | 20 | from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME |
20 | 21 | from django.contrib.admin.models import LogEntry, DELETION |
21 | 22 | from django.contrib.admin.sites import LOGIN_FORM_KEY |
22 | 23 | from django.contrib.admin.util import quote |
23 | | -from django.contrib.admin.views.main import IS_POPUP_VAR |
| 24 | +from django.contrib.admin.views.main import IS_POPUP_VAR, TO_FIELD_VAR |
24 | 25 | from django.contrib.admin.tests import AdminSeleniumWebDriverTestCase |
25 | 26 | from django.contrib.auth import REDIRECT_FIELD_NAME |
26 | 27 | from django.contrib.auth.models import Group, User, Permission, UNUSABLE_PASSWORD |
@@ -557,6 +558,19 @@ def test_disallowed_filtering(self): |
557 | 558 | response = self.client.get("/test_admin/admin/admin_views/workhour/?employee__person_ptr__exact=%d" % e1.pk) |
558 | 559 | self.assertEqual(response.status_code, 200) |
559 | 560 |
|
| 561 | + def test_disallowed_to_field(self): |
| 562 | + with self.assertRaises(DisallowedModelAdminToField): |
| 563 | + response = self.client.get("/test_admin/admin/admin_views/section/", {TO_FIELD_VAR: 'missing_field'}) |
| 564 | + |
| 565 | + # Specifying a field that is not refered by any other model registered |
| 566 | + # to this admin site should raise an exception. |
| 567 | + with self.assertRaises(DisallowedModelAdminToField): |
| 568 | + response = self.client.get("/test_admin/admin/admin_views/section/", {TO_FIELD_VAR: 'name'}) |
| 569 | + |
| 570 | + # Specifying a field referenced by another model should be allowed. |
| 571 | + response = self.client.get("/test_admin/admin/admin_views/section/", {TO_FIELD_VAR: 'id'}) |
| 572 | + self.assertEqual(response.status_code, 200) |
| 573 | + |
560 | 574 | def test_allowed_filtering_15103(self): |
561 | 575 | """ |
562 | 576 | Regressions test for ticket 15103 - filtering on fields defined in a |
@@ -2138,10 +2152,9 @@ def test_with_fk_to_field(self): |
2138 | 2152 | """Ensure that the to_field GET parameter is preserved when a search |
2139 | 2153 | is performed. Refs #10918. |
2140 | 2154 | """ |
2141 | | - from django.contrib.admin.views.main import TO_FIELD_VAR |
2142 | | - response = self.client.get('/test_admin/admin/auth/user/?q=joe&%s=username' % TO_FIELD_VAR) |
| 2155 | + response = self.client.get('/test_admin/admin/auth/user/?q=joe&%s=id' % TO_FIELD_VAR) |
2143 | 2156 | self.assertContains(response, "\n1 user\n") |
2144 | | - self.assertContains(response, '<input type="hidden" name="t" value="username"/>', html=True) |
| 2157 | + self.assertContains(response, '<input type="hidden" name="%s" value="id"/>' % TO_FIELD_VAR, html=True) |
2145 | 2158 |
|
2146 | 2159 | def test_exact_matches(self): |
2147 | 2160 | response = self.client.get('/test_admin/admin/admin_views/recommendation/?q=bar') |
|
0 commit comments