|
13 | 13 | from django.core.urlresolvers import reverse |
14 | 14 | # Register auth models with the admin. |
15 | 15 | from django.contrib import admin |
| 16 | +from django.contrib.admin.exceptions import DisallowedModelAdminToField |
16 | 17 | from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME |
17 | 18 | from django.contrib.admin.models import LogEntry, DELETION |
18 | 19 | from django.contrib.admin.sites import LOGIN_FORM_KEY |
19 | 20 | from django.contrib.admin.util import quote |
20 | | -from django.contrib.admin.views.main import IS_POPUP_VAR |
| 21 | +from django.contrib.admin.views.main import IS_POPUP_VAR, TO_FIELD_VAR |
21 | 22 | from django.contrib.admin.tests import AdminSeleniumWebDriverTestCase |
22 | 23 | from django.contrib.auth import REDIRECT_FIELD_NAME |
23 | 24 | from django.contrib.auth.models import Group, User, Permission, UNUSABLE_PASSWORD |
@@ -572,6 +573,19 @@ def test_disallowed_filtering(self): |
572 | 573 | response = self.client.get("/test_admin/admin/admin_views/workhour/?employee__person_ptr__exact=%d" % e1.pk) |
573 | 574 | self.assertEqual(response.status_code, 200) |
574 | 575 |
|
| 576 | + def test_disallowed_to_field(self): |
| 577 | + with self.assertRaises(DisallowedModelAdminToField): |
| 578 | + response = self.client.get("/test_admin/admin/admin_views/section/", {TO_FIELD_VAR: 'missing_field'}) |
| 579 | + |
| 580 | + # Specifying a field that is not refered by any other model registered |
| 581 | + # to this admin site should raise an exception. |
| 582 | + with self.assertRaises(DisallowedModelAdminToField): |
| 583 | + response = self.client.get("/test_admin/admin/admin_views/section/", {TO_FIELD_VAR: 'name'}) |
| 584 | + |
| 585 | + # Specifying a field referenced by another model should be allowed. |
| 586 | + response = self.client.get("/test_admin/admin/admin_views/section/", {TO_FIELD_VAR: 'id'}) |
| 587 | + self.assertEqual(response.status_code, 200) |
| 588 | + |
575 | 589 | def test_allowed_filtering_15103(self): |
576 | 590 | """ |
577 | 591 | Regressions test for ticket 15103 - filtering on fields defined in a |
@@ -2061,10 +2075,9 @@ def test_with_fk_to_field(self): |
2061 | 2075 | """Ensure that the to_field GET parameter is preserved when a search |
2062 | 2076 | is performed. Refs #10918. |
2063 | 2077 | """ |
2064 | | - from django.contrib.admin.views.main import TO_FIELD_VAR |
2065 | | - response = self.client.get('/test_admin/admin/auth/user/?q=joe&%s=username' % TO_FIELD_VAR) |
| 2078 | + response = self.client.get('/test_admin/admin/auth/user/?q=joe&%s=id' % TO_FIELD_VAR) |
2066 | 2079 | self.assertContains(response, "\n1 user\n") |
2067 | | - self.assertContains(response, '<input type="hidden" name="t" value="username"/>', html=True) |
| 2080 | + self.assertContains(response, '<input type="hidden" name="%s" value="id"/>' % TO_FIELD_VAR, html=True) |
2068 | 2081 |
|
2069 | 2082 | def test_exact_matches(self): |
2070 | 2083 | response = self.client.get('/test_admin/admin/admin_views/recommendation/?q=bar') |
|
0 commit comments