允许在 Django ChoiceField 中进行动态选择
Allow dynamic choice in Django ChoiceField
我在我的应用程序中使用 Select2 创建类似标签的 select 下拉菜单。用户可以 select 个预定义标签或创建新标签。
相关表格class部分:
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.
有什么解决办法吗?
谢谢
我会将 choicefield 更改为 charfield,并使用 clean 方法根据特定条件过滤不需要的选择。只需将其更改为带有 select 小部件的字符字段即可,因为 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
我在我的应用程序中使用 Select2 创建类似标签的 select 下拉菜单。用户可以 select 个预定义标签或创建新标签。
相关表格class部分:
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.
有什么解决办法吗?
谢谢
我会将 choicefield 更改为 charfield,并使用 clean 方法根据特定条件过滤不需要的选择。只需将其更改为带有 select 小部件的字符字段即可,因为 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