Как получить доступ к определенному элементу из списка 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? Это не кажется эффективным, но я не уверен, что у меня есть другой выбор.
Вы можете написать функцию, как показано ниже, и получить ее
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])