Opened 10 years ago
Closed 9 years ago
#23128 closed Bug (worksforme)
_get_FIELD_display doesn't work with Field.get_choices using Iterators — at Version 5
Reported by: | Areski Belaid | Owned by: | Sergii Lapin |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | dev |
Severity: | Normal | Keywords: | get_choices |
Cc: | cmawebsite@… | Triage Stage: | Accepted |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Context:
This issue has been noted when fixing https://code.djangoproject.com/ticket/23112
Current behavior:
Using _get_FIELD_display on a Field.choices using Iterators, you will get the first tuple value.
Expected behavior:
Expected result is to get the human-readable name in from the iterator tuple.
Tests to reproduce the issue:
Edit tests/model_fields/tests.py
add inside class ChoicesTests(test.TestCase)
the following tests:
def test_iterator_choices_and_field_display(self): """ Check that get_choices works with Iterators (#23112). """ self.assertEqual(WhizIter(c=1).get_c_display(), 'val-1') # A nested value self.assertEqual(WhizIter(c=9).get_c_display(), 9) # Invalid value self.assertEqual(WhizIter(c=None).get_c_display(), None) # Blank value self.assertEqual(WhizIter(c='').get_c_display(), '') # Empty value
Change History (5)
comment:1 by , 10 years ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:2 by , 10 years ago
comment:3 by , 10 years ago
Cc: | added |
---|
comment:4 by , 9 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:5 by , 9 years ago
Description: | modified (diff) |
---|---|
Resolution: | → worksforme |
Status: | assigned → closed |
I don't think there's an issue here. The Counter
used for the choices in WhizIter
generates values starting from two, not one so the provided test isn't correct. If you change the first line to self.assertEqual(WhizIter(c=2).get_c_display(), 'val-2')
it passes.
that's odd. it works for me.