使用Enum时Admin中的Django选择

时间:2018-09-17 00:17:57

标签: python django django-models django-admin django-orm

我有一个模型,其中使用Enum进行选择:

class Agreement(models.Model):
    class Category(enum.Enum):
        EULA = 0
        PROVIDER = 1

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    category = models.IntegerField(
        choices=[(choice.name, choice.value)
                 for choice in Category])
    title = models.CharField(max_length=128)
    content = models.TextField()

我使用简单的管理站点注册进行注册:

admin.site.register(Agreement)

管理站点呈现对象时,不允许我保存它吗?有人遇到过类似的问题吗?

enter image description here

1 个答案:

答案 0 :(得分:3)

根据documentation

  

每个元组中的第一个元素是要在模型上设置的实际值,第二个元素是人类可读的名称。

namevalue应该相反,像这样:

category = models.IntegerField(
    choices=[(choice.value, choice.name)
             for choice in Category])

因为category是一个整数字段,而name返回一个字符串。