如何在Django模型中将枚举用作选择字段?

11 浏览
0 Comments

如何在Django模型中将枚举用作选择字段?

我有一个模型类,我希望其中的两个字段是选择字段,因此为了填充这些选择,我正在使用以下的枚举:

# models.py
class Transaction(models.Model):
    transaction_status = models.CharField(max_length=255, choices=TransactionStatus.choices())
    transaction_type = models.CharField(max_length=255, choices=TransactionType.choices())
# enums.py
class TransactionType(Enum):
    IN = "IN",
    OUT = "OUT"
    
    @classmethod
    def choices(cls):
        return tuple((i.name, i.value) for i in cls)
class TransactionStatus(Enum):
    INITIATED = "INITIATED",
    PENDING = "PENDING",
    COMPLETED = "COMPLETED",
    FAILED = "FAILED"
    ERROR = "ERROR"
    
    @classmethod
    def choices(cls):
        return tuple((i.name, i.value) for i in cls)

然而,当我试图通过Django Admin访问这个模型时,我得到了以下错误:

Django Version: 1.11
Exception Type: ValueError
Exception Value:    
too many values to unpack (expected 2)

我按照两篇文章的描述使用了枚举:

- [https://hackernoon.com/using-enum-as-model-field-choice-in-django-92d8b97aaa63](https://hackernoon.com/using-enum-as-model-field-choice-in-django-92d8b97aaa63)

- [https://blog.richard.do/2014/02/18/how-to-use-enums-for-django-field-choices/](https://blog.richard.do/2014/02/18/how-to-use-enums-for-django-field-choices/)

0