允许在Django ChoiceField中进行动态选择

时间:2015-04-08 22:33:14

标签: python django jquery-select2

我在我的应用程序中使用Select2来创建类似标记的选择下拉菜单。用户可以选择预定义标签的数量或创建新标签。

相关表格类部分:

   all_tags = Tag.objects.values_list('id', 'word')

   # Tags
    tags = forms.ChoiceField(
        choices=all_tags,
        widget=forms.Select(
            attrs={
                'class': 'question-tags',
                'multiple': 'multiple',
            }
        )
    )

问题是Django 在验证时不允许自定义标记(选项)。出现错误我看起来像这样:Select a valid choice. banana is not one of the available choices.

周围有什么办法吗?

由于

1 个答案:

答案 0 :(得分:1)

我会将choicefield更改为charfield,并使用clean方法根据特定条件过滤不需要的选项。简单地使用select小部件将其更改为char字段将起作用,因为Select2仍然是javascript。

class Myform(forms.Form):
    tags = forms.CharField(
    max_length=254,
    widget=forms.Select(
        choices=tags,  # here we set choices as part of the select widget
        attrs={
            'class': 'question-tags',
            'multiple': 'multiple',
            }
        )
    )
    def clean_tags(self):
        tags = self.cleaned_data['tags']
        # more tag cleaning logic here
        return tags