选择为枚举时,Django管理面板无法设置有效选择。

时间:2018-06-21 17:54:07

标签: 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.

Django自1.10起具有ability to serialize 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]  
    )

3 个答案:

答案 0 :(得分: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()]  
    )

答案 1 :(得分:1)

我只是有这个问题。如下重写您的ON模型,并注意选择行中的更改。

Book

答案 2 :(得分:-2)

我将 TOMS.Cells(1, 2).Formula = "=BDP(""" & TOMS.Cells(1, 1).Value & " Corp"", ""ID_ISIN"")" 更改为(tag,tag.value),并且有效。