在Django模型中实现依赖选择的最佳方式

时间:2014-04-16 19:26:11

标签: python django django-models django-forms

我有一个名为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'等等。如何在不使用任何单独的模型/外键的情况下以最佳方式实现此目的?请注意,这些列表是静态的。

1 个答案:

答案 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)