У меня есть два вложенных кортежа, похожих на приведенные ниже, которые будут использоваться в вариантах в Django's model.CharField () .
COMPANIES = (
('USA', (
('gm', 'General Motors'),
('tesla', 'Tesla'),
('ford', 'Ford')
)
),
('South Korea', (
('kia', 'Kia Motors'),
('hyundai', 'Hyundai Motors'),
)
),
('Japan', (
('nissan', 'Nissan Motors'),
('honda', 'Honda Motors'),
('toyota', 'Toyota Motors'),
)
),
)
MANAGERS = (
('USA', (
('jack', 'Jack Smith'),
('doyun', 'Doyun Kim'),
('jill', 'Jill Maggie'),
('akari', 'Akari Tanaka'),
)
),
('South Korea', (
('doyun', 'Doyun Kim'),
('siu', 'Siu Park'),
('jill', 'Jill Maggie'),
)
),
('Japan', (
('akari', 'Akari Tanaka'),
('jack', 'Jack Smith'),
('haruto', 'Haruto Nakamura'),
)
),
)
В настоящее время мойРабота моих рабочих полей выглядит следующим образом:
companies = models.CharField(max_length=30, choices=COMPANIES)
managers = models.CharField(max_length=50, choices=MANAGERS)
Но для точности данных я не хочу повторять названия стран дважды и, возможно, иметь такие данные (или что-то подобное):
COMPANY_INFO = (
('USA', (
('gm', 'General Motors'),
('tesla', 'Tesla'),
('ford', 'Ford')
), (
('jack', 'Jack Smith'),
('doyun', 'Doyun Kim'),
('jill', 'Jill Maggie'),
('akari', 'Akari Tanaka'),
)
),
('South Korea', (
('kia', 'Kia Motors'),
('hyundai', 'Hyundai Motors'),
), (
('doyun', 'Doyun Kim'),
('siu', 'Siu Park'),
('jill', 'Jill Maggie'),
)
),
('Japan', (
('nissan', 'Nissan Motors'),
('honda', 'Honda Motors'),
('toyota', 'Toyota Motors'),
), (
('akari', 'Akari Tanaka'),
('jack', 'Jack Smith'),
('haruto', 'Haruto Nakamura'),
)
),
)
Два вопроса:
1) Как мне написать model.Charfield()
, чтобы он использовал COMPANY_INFO
?
companies = models.CharField(max_length=30, choices=COMPANY_INFO[some magic here])
managers = models.CharField(max_length=50, choices=COMPANY_INFO[some other magic here])
COMPANY_INFO
не обязательно должен быть кортежем, если он принят model.Charfield()
, то есть достаточно следующего условия:
Итерация (например,список или кортеж), состоящий из итераций ровно двух элементов (например, [(A, B), (A, B) ...]) для использования в качестве выбора для этого поля.
2) (БОНУС) Как я могу легко выполнять поиск, используя COMPANY_INFO
?В частности, что такое код Python, чтобы получить ответы на такие вопросы, как: «Каковы сокращения компаний в США?», «Какое имя и фамилия у« сиу »?».