【问题标题】:Best way to implement depedent choices in Django models在 Django 模型中实现依赖选择的最佳方法
【发布时间】:2014-04-16 19:26:11
【问题描述】:

我有一个名为 CarAd 的 Django 模型,实现如下:

class CarAd(models.Model):
    MAKE = (
            (0, 'Acura'), (1, 'Alpha Romeo'), (2, 'Aston'), (3, 'Toyota'), (4, 'Honda')
        )

    make = models.IntegerField(choices=MAKE)

我想实现它,使每个品牌都有汽车模型的子集(不是 Django 模型)。例如,丰田有一个包含元素“卡罗拉”、“普锐斯”和“凯美瑞”的子集。我想根据用户选择的汽车品牌提供此子集的列表。

例如,如果他选择丰田,则应为他提供“卡罗拉”、“普锐斯”和“凯美瑞”。如果他选择本田,他应该提供“思域”、“城市”、“雅阁”等。在不使用任何单独的模型/外键的情况下,我应该如何以最佳方式实现这一目标?请注意,这些列表是静态的。

【问题讨论】:

    标签: python django django-models django-forms


    【解决方案1】:
    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)
    

    【讨论】:

      猜你喜欢
      • 2012-10-09
      • 1970-01-01
      • 2016-03-10
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      相关资源
      最近更新 更多