【发布时间】:2018-10-08 22:07:42
【问题描述】:
我有两个类似于下面的嵌套元组,它们将用于 Django 的model.CharField() 中的choices。
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) (BONUS) 如何使用COMPANY_INFO 轻松进行查找?具体来说,可以用什么 Python 代码来回答以下问题:“美国的公司缩写是什么?”、“'siu' 的名字和姓氏是什么?”。
【问题讨论】:
标签: python django nested tuples