Django, как получить человекопонятный текст Choices для значения выбора без экземпляра модели

Во-первых, да, я знаю о get_FOO_display(). Это замечательно, если у вас есть экземпляр модели, но в моей ситуации его нет.

Я уверен, что каждый пользователь django в какой-то момент задается вопросом, почему Django использует кортежи, а не dict для определения вариантов выбора, но так или иначе, у меня есть такая модель:

class Review(models.Model):
    PENDING = ''
    APPROVED = 'A'
    DECLINED = 'D'
    SKIPPED = 'S'
    RESULT_CHOICES = (
        (PENDING, 'Pending'),
        (DECLINED, 'Declined'),
        (APPROVED, 'Approved'),
        (SKIPPED, 'Skipped'),
    )
    result = models.CharField('result', max_length=1, choices=RESULT_CHOICES, blank=True, default='')

Теперь у меня нет экземпляра модели, но есть значение, например, A, или D. Как мне получить соответствующее текстовое значение, например Approved, или Declined и т.д. Я мог бы создать dict, а затем искать значение, но, конечно, есть более "встроенный в django" способ?

Не ищу такого подхода к молотку:

   human_friendly = [
        PENDING: 'Pending',
        DECLINED: 'Declined',
        APPROVED: 'Approved',
        SKIPPED: 'Skipped',
    ]['A']

Начиная с версии 3.0 вы можете использовать перечислительный тип для выбора

class Review(models.Model):

    class ResultChoices(models.TextChoices):
        PENDING = ''
        DECLINED = 'D'
        APPROVED = 'A'
        SKIPPED = 'S'

    result = models.CharField('result', max_length=1, choices=ResultChoices.choices, blank=True, default=ResultChoices.PENDING)

Review.ResultChoices('A') # Review.ResultChoices.APPROVED
Review.ResultChoices('A').label # 'Approved'
Вернуться на верх