Problem
In Django 5.0 field choices seem to be always lists, even when defined as Choices. In Django 4.3.9 it seems to be working as expected.
Environment
- Django Model Utils version: 4.5.0
- Django version: 5.0
- Python version: 3.10
- Other libraries used, if any:
Code examples
from model_utils import Choices
class MyClass
my_field = models.CharField(
choices=Choices(("M", "Male", "MALE"), ("F", "Female", "FEMALE"))
)
Django 4.2.11
from models import MyModel
type(MyModel._meta.get_field("my_field").choices)
<class 'model_utils.choices.Choices'>
MyModel._meta.get_field("my_field").choices
Choices(("M", "Male", "MALE"), ("F", "Female", "FEMALE"))
Django 5.0
from models import MyModel
type(MyModel._meta.get_field("my_field").choices)
MyModel._meta.get_field("my_field").choices
[("M", "MALE"), ("F", "FEMALE")]
This raises an error
TypeError: list indices must be integers or slices, not str
when trying to
MyModel._meta.get_field("my_field").choices["M"]
Problem
In Django 5.0 field choices seem to be always lists, even when defined as Choices. In Django 4.3.9 it seems to be working as expected.
Environment
Code examples
Django 4.2.11
<class 'model_utils.choices.Choices'>Choices(("M", "Male", "MALE"), ("F", "Female", "FEMALE"))Django 5.0
<class 'list'>[("M", "MALE"), ("F", "FEMALE")]This raises an error
TypeError: list indices must be integers or slices, not strwhen trying to