我有一个名为CarAd的Django模型,其实现如下:
class CarAd(models.Model):
MAKE = (
(0, 'Acura'), (1, 'Alpha Romeo'), (2, 'Aston'), (3, 'Toyota'), (4, 'Honda')
)
make = models.IntegerField(choices=MAKE)
我想实现它,使每个make都有一个汽车模型的子集(不是Django模型)。例如,丰田的子集中包括“卡罗拉”,“普鲁斯”和“凯美瑞”等元素。我想根据用户选择的汽车品牌提供此子集的列表。
例如,如果他选择丰田,他应该被提供“卡罗拉”,“普锐斯”和“凯美瑞”。如果他选择本田,他应该被提供' Civic' City' City' Accord'等等。如何在不使用任何单独的模型/外键的情况下以最佳方式实现此目的?请注意,这些列表是静态的。
答案 0 :(得分:2)
class CarAd(models.Model):
MAKE_HONDA = 0
MAKE_TOYOTA = 1
MAKES = ((MAKE_HONDA, 'Honda'),
(MAKE_TOYOTA, 'Toyota'),)
MODELS = { MAKE_HONDA: ('Civic', 'City',),
MAKE_TOYOTA: ('Corolla', 'Prius',)
}
make = models.IntegerField(choices=MAKES)
# Django Form
class CarAdForm(forms.Form):
make = forms.ChoiceField(choices=CarAd.MAKES)
def __init__(self, *args, **kwargs):
super(forms.Form, self).__init__(*args, **kwargs)
# Car make
make = args[0]['make']
models = CarAd.MODELS[make]
self.fields['models'] = forms.ChoiceField(choices=models)