Django中的两级选择字段

时间:2016-05-25 18:47:07

标签: django

我有两个字段categorysubcategory,如下所示

CATEGORY = {
             'Fruit': ['Apple', 'Pear', 'Watermelon'],
             'Cell': ['Sumsung', 'Apple', 'Huawei'],
             'OS': ['OS X', 'IOS', 'Android', 'Linux']
           }

所以类别是['Fruit', 'Cell Brand', 'OS'],每个类别都有自己的子类别。

现在我有了表格:

class MyForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ('category', 'subcategory')
    category = forms.CharField(widget=forms.Select)
    subcategory = forms.CharField(widget=forms.Select)

    def __init__(self, *args, **kwargs):
        self.instance  = kwargs.get('instance', '')
        self.data  = kwargs.get('data', '')
        self.category_choice = CATEGORY
        self.fields['category'].widget.choice  = self.init_category()
        self.fields['category'].widget.attrs['data-choices'] = self.category_choice
        self.fields['subcategory'].widget.choice = self.init_subcategory()

    def init_category(self):
        cat_lst = sorted([key for key in self.category_choice])
        return ((key, key) for key in cat_lst) 

    def init_subcategory(self):
        if not self.instance:
            return ((key, key) for key in self.category_choice['Cell'])
        elif not self.instance.category:
            return ((key, key) for key in self.category_choice[self.data['category']])
        return ((key, key) for key in self.category_choice[self.instance.category])

我想解释一下'init_subcategory'方法,它对我来说看起来很难看。通常我想按类别值启动子类别选择。有三种情况:1。创建一个新表单:这应该是我想的无限形式,然后我返回第一个项目的子类别Cell。 2.编辑表单,因此我们应该使用存储在实例中的值来呈现类别和子类别。 3.表单返回有错误,在这种情况下应该有数据绑定到表单。

由于我已将CATEGORY传递给前端,因此我可以根据类别字段更改使用javascript来操作子类别字段选项。

所以我的问题是,有没有更好的方法来实现我想要的东西?或者这里有任何改进。非常感谢任何建议。

0 个答案:

没有答案