Django выбор модели Текст в целое число - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь создать модель django, используя текст в качестве значения для IntegerField

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.IntegerChoices как models.TextChoices и отобразить их в целое число, но django запрещает такие действия. Что можно сделать, чтобы создать объект, как показано в примере?

1 Ответ

0 голосов
/ 06 апреля 2020

Если вам просто нужен разумный способ доступа к этим значениям, стандартный способ сделать это - определить константы в вашем классе:

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% того, что вам нужно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...