Как получить доступ к определенному элементу из списка CHOICES в Django?

В моих моделях есть список вариантов, например:

class Graduation(models.Model):
    YEAR_IN_SCHOOL_CHOICES = [
        ('FR', 'Freshman'),
        ('SO', 'Sophomore'),
        ('JR', 'Junior'),
        ('SR', 'Senior'),
        ('GR', 'Graduate'),
    ]
    student_level = models.CharField(max_length=2, choices=YEAR_IN_SCHOOL_CHOICES)

В моих представлениях я хочу получить значение для определенного элемента. У меня есть следующее:

search = 'JR'
all_choices = Graduation.YEAR_IN_SCHOOL_CHOICES

Моя цель - получить Junior, возвращаемый системой. Как я могу это сделать?

Я пытался:

all_choices[search]

, но это не работает. Я знаю, что могу изменить формат списка выбора в моделях, но в этом случае мои модели не могут быть изменены. Каков правильный способ получения метки из этого списка? Нужно ли мне пройтись по списку и использовать оператор if? Это не кажется эффективным, но я не уверен, что у меня есть другой выбор.

Возможный дубликат

Использовать

get_<field_name>_display()

Вы можете написать функцию, как показано ниже, и получить ее

 def get_choice(all_choices,search):
      for choice in all_choices:
        if choice[0] == search:
          return choice[1]
 return None    
 get_choice(all_choices,'JR')

попробуйте это, я думаю, что использование словаря будет более эффективным, чем списка. Временная сложность для словаря - O(1), а для списка - O(n).

search = 'JR'
all_choices = Graduation.YEAR_IN_SCHOOL_CHOICES
dictionnary = {i[0]:i[1] for i in all_choices}
print(dictionnary[search])
Вернуться на верх