Ticket #9969: 9969-admin-bugs-with-nested-choices-r9905.diff
File 9969-admin-bugs-with-nested-choices-r9905.diff, 6.4 KB (added by , 16 years ago) |
---|
-
django/contrib/admin/filterspecs.py
diff -r 3976471d3430 django/contrib/admin/filterspecs.py
a b 89 89 yield {'selected': self.lookup_val is None, 90 90 'query_string': cl.get_query_string({}, [self.lookup_kwarg]), 91 91 'display': _('All')} 92 for k, v in self.field. choices:92 for k, v in self.field.flatchoices: 93 93 yield {'selected': smart_unicode(k) == self.lookup_val, 94 94 'query_string': cl.get_query_string({self.lookup_kwarg: k}), 95 95 'display': v} -
django/contrib/admin/templatetags/admin_list.py
diff -r 3976471d3430 django/contrib/admin/templatetags/admin_list.py
a b 205 205 result_repr = EMPTY_CHANGELIST_VALUE 206 206 # Fields with choices are special: Use the representation 207 207 # of the choice. 208 elif f. choices:209 result_repr = dict(f. choices).get(field_val, EMPTY_CHANGELIST_VALUE)208 elif f.flatchoices: 209 result_repr = dict(f.flatchoices).get(field_val, EMPTY_CHANGELIST_VALUE) 210 210 else: 211 211 result_repr = escape(field_val) 212 212 if force_unicode(result_repr) == '': -
tests/regressiontests/admin_views/customadmin.py
diff -r 3976471d3430 tests/regressiontests/admin_views/customadmin.py
a b 28 28 site.register(models.Article, models.ArticleAdmin) 29 29 site.register(models.Section, inlines=[models.ArticleInline]) 30 30 site.register(models.Thing, models.ThingAdmin) 31 site.register(models.Fabric, models.FabricAdmin) -
new file tests/regressiontests/admin_views/fixtures/admin-views-fabrics.xml
diff -r 3976471d3430 tests/regressiontests/admin_views/fixtures/admin-views-fabrics.xml
- + 1 <?xml version="1.0" encoding="utf-8"?> 2 <django-objects version="1.0"> 3 <object pk="1" model="admin_views.fabric"> 4 <field type="CharField" name="surface">x</field> 5 </object> 6 <object pk="2" model="admin_views.fabric"> 7 <field type="CharField" name="surface">y</field> 8 </object> 9 <object pk="3" model="admin_views.fabric"> 10 <field type="CharField" name="surface">plain</field> 11 </object> 12 </django-objects> -
tests/regressiontests/admin_views/models.py
diff -r 3976471d3430 tests/regressiontests/admin_views/models.py
a b 134 134 class ThingAdmin(admin.ModelAdmin): 135 135 list_filter = ('color',) 136 136 137 class Fabric(models.Model): 138 NG_CHOICES = ( 139 ('Textured', ( 140 ('x', 'Horizontal'), 141 ('y', 'Vertical'), 142 ) 143 ), 144 ('plain', 'Smooth'), 145 ) 146 surface = models.CharField(max_length=20, choices=NG_CHOICES) 147 148 class FabricAdmin(admin.ModelAdmin): 149 list_display = ('surface',) 150 list_filter = ('surface',) 151 137 152 admin.site.register(Article, ArticleAdmin) 138 153 admin.site.register(CustomArticle, CustomArticleAdmin) 139 154 admin.site.register(Section, inlines=[ArticleInline]) 140 155 admin.site.register(ModelWithStringPrimaryKey) 141 156 admin.site.register(Color) 142 157 admin.site.register(Thing, ThingAdmin) 158 admin.site.register(Fabric, FabricAdmin) 143 159 144 160 # We intentionally register Promo and ChapterXtra1 but not Chapter nor ChapterXtra2. 145 161 # That way we cover all four cases: -
tests/regressiontests/admin_views/tests.py
diff -r 3976471d3430 tests/regressiontests/admin_views/tests.py
a b 12 12 from models import Article, CustomArticle, Section, ModelWithStringPrimaryKey 13 13 14 14 class AdminViewBasicTest(TestCase): 15 fixtures = ['admin-views-users.xml', 'admin-views-colors.xml' ]16 17 # Store the bit of the URL where the admin is registered as a class 15 fixtures = ['admin-views-users.xml', 'admin-views-colors.xml', 'admin-views-fabrics.xml'] 16 17 # Store the bit of the URL where the admin is registered as a class 18 18 # variable. That way we can test a second AdminSite just by subclassing 19 19 # this test case and changing urlbit. 20 20 urlbit = 'admin' … … 172 172 self.assertRedirects(response, '/test_admin/%s/admin_views/thing/?e=1' % self.urlbit) 173 173 response = self.client.get('/test_admin/%s/admin_views/thing/' % self.urlbit, {'color__id__exact': 'StringNotInteger!'}) 174 174 self.assertRedirects(response, '/test_admin/%s/admin_views/thing/?e=1' % self.urlbit) 175 176 def testNamedGroupFieldChoicesChangeList(self): 177 """ 178 Ensures the admin changelist shows correct values in the relevant column 179 for rows corresponding to instances of a model in which a named group 180 has been used in the choices option of a field. 181 """ 182 response = self.client.get('/test_admin/%s/admin_views/fabric/' % self.urlbit) 183 self.failUnlessEqual(response.status_code, 200) 184 self.failUnless( 185 '<a href="1/">Horizontal</a>' in response.content and 186 '<a href="2/">Vertical</a>' in response.content, 187 "Changelist table isn't showing the right human-readable values set by a model field 'choices' option named group." 188 ) 189 190 def testNamedGroupFieldChoicesFilter(self): 191 """ 192 Ensures the filter UI shows correctly when at least one named group has 193 been used in the choices option of a model field. 194 """ 195 response = self.client.get('/test_admin/%s/admin_views/fabric/' % self.urlbit) 196 self.failUnlessEqual(response.status_code, 200) 197 self.failUnless( 198 '<div id="changelist-filter">' in response.content, 199 "Expected filter not found in changelist view." 200 ) 201 self.failUnless( 202 '<a href="?surface__exact=x">Horizontal</a>' in response.content and 203 '<a href="?surface__exact=y">Vertical</a>' in response.content, 204 "Changelist filter isn't showing options contained inside a model field 'choices' option named group." 205 ) 175 206 176 207 class CustomModelAdminTest(AdminViewBasicTest): 177 208 urlbit = "admin2"