0

我正在尝试使用 Text 作为 IntegerField 的值来创建 django 模型

class User(models.Model):

    class UserRole(models.IntegerChoices):
        FULLACCESS = 0, _('full_access_user')
        READONLY = 1, _('read_only_user')
        WRITEONLY = 2, _('write_only_user')

    role = models.IntegerField(choices=UserRole.choices)

当我尝试创建用户 时,User.objects.create(role="full_access_user")它不会将字符串值映射到整数。试图将它们定义models.IntegerChoicesmodels.TextChoices并将其映射到整数,但 django 禁止此类操作。可以做些什么来创建像示例中所示的对象?

4

1 回答 1

0

如果您只需要一种理智的方式来访问这些值,那么执行此操作的标准方式是在您的类中定义常量:

class User(models.Model):
    ROLE_FULL_ACCESS = 0
    ROLE_READ_ONLY = 1
    ROLE_WRITE_ONLY = 2
    ROLE_CHOICES = [
        (ROLE_FULL_ACCESS, 'Full Access'),
        (ROLE_READ_ONLY, 'Read Only'),
        (ROLE_WRITE_ONLY, 'Write Only'),
    ]

    role = models.IntegerField(choices=ROLE_CHOICES)

用法:

User.objects.create(role=User.ROLE_FULL_ACCESS)

您可以进一步重构它,但除非您实际上在其他地方重用生成的代码,否则通常没有必要,因为上述内容能够涵盖您需要做的约 99% 的事情。

于 2020-04-06T09:13:13.800 回答