Как получить доступ к имени группы в Django choices?
Я использую структуру из нескольких кортежей для отображения вариантов выбора в разделе администратора, и я хотел бы получить доступ к первому элементу выбранного кортежа. В примере ниже, предполагая, что выбранный носитель vinyl
, я хотел бы получить Audio
. Как я могу это сделать?
from django.db import models
class Student(models.Model):
MEDIA_CHOICES = [
('Audio', (
('vinyl', 'Vinyl'),
('cd', 'CD'),
)
),
('Video', (
('vhs', 'VHS Tape'),
('dvd', 'DVD'),
)
),
('unknown', 'Unknown'),
]
media = models.CharField(max_length=20, choices=MEDIA_CHOICES)
Насколько я знаю, функции для этого не существует, поэтому вам придется написать свою собственную:
from django.db import models
from operator import itemgetter
class Student(models.Model):
MEDIA_CHOICES = [
(
'Audio',
(
('vinyl', 'Vinyl'),
('cd', 'CD'),
),
),
(
'Video',
(
('vhs', 'VHS Tape'),
('dvd', 'DVD'),
),
),
(
None,
(('unknown', 'Unknown'),)
),
]
media = models.CharField(max_length=20, choices=MEDIA_CHOICES)
@property
def media_group(self):
media = self.media
return next(
(
g
for g, vs in self.MEDIA_CHOICES
if media in map(itemgetter(0), vs)
),
None,
)
Это вернет None
в случае, если группа не может быть найдена, или если группа является None
(см. изменения в MEDIA_CHOICES
.