Django admin panel can not set valid choice when choices are enum.Enum

vvo*_*ody 6 django enums django-admin models

我使用 enum.Enum 作为现场语言的选择。

我可以创建一本书b = Book(title="Some Title", language=LanguageChoice.EN)

并通过 查询books = Book.objects.filter(languge=LanguageChoice.EN)

但是,当我想在管理面板中创建新书时,它会显示Select a valid choice. LanguageChoice.EN is not one of the available choices..

从 1.10开始, Django能够序列化 enum.Enum。那么管理面板应该如何工作?谢谢。

from enum import Enum
from django.db import models


class LanguageChoice(Enum):
    DE = "German"
    EN = "English"
    CN = "Chinese"
    ES = "Spanish"


class Book(models.Model):
    title = models.CharField(max_length=255)
    language = models.CharField(
        max_length=5,
        choices=[(tag, tag.value) for tag in LanguageChoice]  
    )
Run Code Online (Sandbox Code Playgroud)

jri*_*ief 2

你应该将你的 Django 模型重写为

class LanguageChoice(Enum):
    DE = "German"
    EN = "English"
    CN = "Chinese"
    ES = "Spanish"

    @classmethod
    def all(self):
        return [LanguageChoice.DE, LanguageChoice.EN, LanguageChoice.CN, LanguageChoice.ES]


class Book(models.Model):
    title = models.CharField(max_length=255)
    language = models.CharField(
        max_length=5,
        choices=[(tag.value, tag.name) for tag in LanguageChoice.all()]  
    )
Run Code Online (Sandbox Code Playgroud)

  • 只需将 `(tag, tag.value)` 更改为 `(tag.name, tag.value)` 就足够了。其余的更改不需要。 (4认同)