我有两个类似于下面的嵌套元组,它们将在Django choices的model.CharField()中使用。
public sortComparer = (reference: string, comparer: string) => {
if (reference == "Overdue") {
return -2;
}
else if (reference == "Planned") {
return -1;
}
else if (reference == "Completed") {
return 1;
}
return 0;
};
目前,我的工作领域如下:
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)
两个问题:
1)我如何编写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'),
)
),
)
以便使用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
接受即可,即满足以下条件即可:
由以下组成的可迭代对象组成的可迭代对象(例如列表或元组) 恰好有两个项目(例如[(A,B),(A,B)...])可用作选择 此字段。
2)(奖励)如何使用model.Charfield()
轻松进行查找?具体来说,什么是获得以下问题答案的Python代码:“在美国的公司缩写是什么?”,“'siu'的名字和姓氏是什么?”。
答案 0 :(得分:1)
是的,您可以将其指定为:
COMPANIES = tuple((k, v) for (k, v, __) in COMPANY_INFO)
MANAGERS = tuple((k, v) for (k, __, v) in COMPANY_INFO)
因此您可以在以下字段中定义它:
companies = models.CharField(
max_length=30,
choices=tuple((k, v) for (k, v, __) in COMPANY_INFO)
)
managers = models.CharField(
max_length=50,
choices=tuple((k, v) for (k, __, v) in COMPANY_INFO)
)
但是根据您的第二个问题:
2)(奖励)如何使用COMPANY_INFO轻松进行查找?具体来说,什么是获得以下问题答案的Python代码:“美国的公司缩写是什么?”
我认为为Company
和Manager
创建单独的模型可能更有意义。这里的数据是静态的,例如,如果您要添加一个公司/ mananger,重命名一个公司或删除一个公司/公司,则可能会导致一些问题。
通过ForeignKey
进行建模,还可以轻松地查询数据库,进行更改并存储有关公司/经理的额外数据。
CharField
:例如,美国的州可能是相当静态的(几十年前就有计划制定梵蒂冈,大不列颠等美国的州,但据我所知,这些计划从来没有真正采取过“动力”。一个人的性别是另一个。
但是公司和经理通常具有更动态的性质。如果Doyun Kim不再是经理该怎么办?还是搬到日本?