#31262: Support dictionaries in Field.choices for named groups.
-------------------------------------+-------------------------------------
     Reporter:  Tom Forbes           |                    Owner:  nobody
         Type:  New feature          |                   Status:  new
    Component:  Database layer       |                  Version:  master
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:                       |             Triage Stage:  Accepted
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  1                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Changes (by felixxm):

 * component:  Forms => Database layer (models, ORM)
 * version:   => master
 * stage:  Unreviewed => Accepted


Old description:

> The Django documentation gives this example for creating named groups of
> choices:
>

> {{{
> MEDIA_CHOICES = [
>     ('Audio', (
>             ('vinyl', 'Vinyl'),
>             ('cd', 'CD'),
>         )
>     ),
>     ('Video', (
>             ('vhs', 'VHS Tape'),
>             ('dvd', 'DVD'),
>         )
>     ),
>     ('unknown', 'Unknown'),
> ]
> }}}
>
> With Python 3.7 (and implicitly in CPython 3.6) dictionaries are ordered,
> meaning this syntax could be replaced by the cleaner and easier to parse:
>
> {{{
> {
>     "Audio": (
>          ('vinyl', 'Vinyl'),
>          ('cd', 'CD'),
>     ),
>     "Video": (
>         ('vhs', 'VHS Tape'),
>         ('dvd', 'DVD'),
>     ),
>    "unknown": "Unknown"
> }
> }}}
>
> Once 3.7 is the lowest supported version we should document that this is
> supported, and ensure that it works correctly.

New description:

 The Django documentation gives this example for creating named groups of
 choices:

 {{{
 MEDIA_CHOICES = [
     ('Audio', (
             ('vinyl', 'Vinyl'),
             ('cd', 'CD'),
         )
     ),
     ('Video', (
             ('vhs', 'VHS Tape'),
             ('dvd', 'DVD'),
         )
     ),
     ('unknown', 'Unknown'),
 ]
 }}}

 With Python 3.7 (and implicitly in CPython 3.6) dictionaries are ordered,
 meaning this syntax could be replaced by the cleaner and easier to parse:

 {{{
 {
     "Audio": (
          ('vinyl', 'Vinyl'),
          ('cd', 'CD'),
     ),
     "Video": (
         ('vhs', 'VHS Tape'),
         ('dvd', 'DVD'),
     ),
    "unknown": "Unknown"
 }
 }}}

 Once 3.7 is the lowest supported version we should document that this is
 supported, and ensure that it works correctly.

--

Comment:

 Agreed, we can officially add this even in Django 3.1, because we've
 already made a decision to assume that dictionaries preserve ordering (see
 #30159 and [https://github.com/django/django/pull/10894 a short
 discussion]).

-- 
Ticket URL: <https://code.djangoproject.com/ticket/31262#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/061.5cd197a7b51625b1ff08252c44b02ad8%40djangoproject.com.

Reply via email to