这就是我的想法(原谅Django格式):
class VehicleMake(Model):
name = CharField(max_length=50)
class VehicleModel(Model):
make = ForeignKey(VehicleMake)
name = CharField(max_length=50)
class VehicleYear(Model):
model = ForeignKey(VehicleModel) # or ManyToManyField
year = PositiveIntegerField()
这将在那些偶然的下拉选择框中使用,这些选择框在视觉上可以像[- Year -][- Make -][- Model -]
那样布局。因此,要查询我需要的数据,我首先必须从years表中选择所有 distinct 年,按降序排序。然后我会发现那一年制造了模型的所有车辆制造商。然后是那一年所有的模型。这是一个很好的方法吗,或者我应该以某种方式重新安排外键?或者在多年/模型中使用多对多表格,以便不再重复一年?
答案 0 :(得分:1)
我不是专家,但我认为它会是这样的?
class VehicleModel( Model ):
name = CharField( max_length=50 )
year = PositiveIntegerField()
manufacturer = ForeignKey( VehicleManufacturer )
class VehicleManufacturer( Model ):
name = CharField(max_length=50)
年份不需要单独的类/表,只需直接插入即可。虽然我没有想到所有的可能性,但你能否告诉我这是否合适?
答案 1 :(得分:1)
我可能过度简化了这一点,但是有一个简单的表格,包括品牌,型号和年份有什么问题?是的,make字符串将在每一行中重复,但实际上 - 您希望在该表中有多少行?
class Vehicle( Model ):
name = CharField( max_length=50 )
year = PositiveIntegerField()
model = CharField( max_length=50 )
答案 2 :(得分:1)
我会选择:
class VehicleModel( Model ):
name = CharField( max_length=50 )
first-year = PositiveIntegerField()
last-year = PositiveIntegerField()
make = ForeignKey( make )
class Make( Model ):
name = CharField(max_length=50)
manufacturer = ForeignKey( VehicleManufacturer )
class VehicleManufacturer( Model ):
name = CharField(max_length=50)
这应该允许你在“General Moters”下将Buick,Chevrolet,Cadilac等分组
另外我认为你的UI逻辑有点缺陷, 这听起来像是一个“向右走”菜单的工作,也就是说,您需要所有制造商的下拉菜单,当选择特定的制造商时,您可以提供模型的子菜单,当选择模型时,您可以预设一个多年的子菜单。
另外,只要选择了新的制造商,就应该编辑“模型”选择的内容,然后每当选择模型时,都应该更新年份选择。
如上所述,您的UI将允许我输入“Studebaker”“Model T”“2010”