使用Enum时,Django在Admin中的选择

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Enum时,Django在Admin中的选择相关的知识,希望对你有一定的参考价值。

我有一个模型,我使用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

答案

根据documentation

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

namevalue应该是相反的方式,像这样:

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

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

以上是关于使用Enum时,Django在Admin中的选择的主要内容,如果未能解决你的问题,请参考以下文章

如何从 django admin 中的单个“选择文件”选择器上传多个图像

使用django admin的日期选择器

Django Admin 下拉选择

将 Django Enum 约束强制到 PostgreSQL 端

Django Admin显示/隐藏字段如果在下拉菜单中选择了特定值

如何根据 Django admin 中的另一个选择标签选项更改选择标签选项?