﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
36930	Using a custom ModelChoices (not IntegerChoices or TextChoices) member as the default value of a model field doesn't select the default value in form's select	Antoine Humbert		"This was triggered in the following forum post: https://forum.djangoproject.com/t/default-for-choices-field-isnt-default-in-admin-form/44189

As per the documentation and the **date** / **DateField** example (see https://docs.djangoproject.com/en/6.0/ref/models/fields/#enumeration-types), defining choices for a data type other than **int** or **str** (e.g. float) should be :

{{{
class FactorChoices(float, models.Choices):
    HALF = 0.5
    SINGLE = 1
    DOUBLE = 2
}}}

then, setting a default value for a field should use one of the enumeration's member (as per the example from documentation: `default=YearInSchool.FRESHMAN`). E.g.:

{{{
class SomeModel(models.Model):
    factor = models.FloatField(choices=FactorChoices, default=FactorChoices.SINGLE)
}}}


When using such definitions, the default value is not selected by default in forms created for such model. This is bescause the `str()` of the default value returns the string representation provided by `enum.Enum` instead of the string representation from `float`.

I believe this is a regression in https://github.com/antoinehumbert/django/commit/fe19b33e2f76045617067dd5123041ae4d3a91ee where the `django.db.models.Choices.__str__` (which specifically called `str(self.value)`) method was removed to the profit of making `IntegerChoices` and `TextChoices` inherit from `enum.ReprEnum`). Unfortunaltly, this dropped the initial `Choices.__str__` behaviour for all other subclasses of `Choices`.

I think the fix is as simple as making `Choices` inherit from `enum.ReprEnum` instead of `enum.Enum`.

I'm working on a PR.
"	Bug	new	Database layer (models, ORM)	6.0	Normal				Unreviewed	0	0	0	0	0	0
