我正在尝试使用ModelChoice字段创建表单。该字段由ajax请求过滤。
self.fields['center'].queryset = TrainingCenter.objects.all()
这很好用。但我正在使用基于另一个字段的ajax加载值。
如果我使用空的查询集来加载没有选择的表单,我会得到"无效的选择"提交时出错。
答案 0 :(得分:0)
您可以编写一个EmptySelect
窗口小部件类,忽略传递给它的选项,如下所示:
class EmptySelect(forms.Select):
def _get_choices(self):
return ()
def _set_choices(self, value):
pass
choices = property(_get_choices, _set_choices)
然后,使用要验证的查询集定义字段,并将EmptySelect
配置为窗口小部件。
center = forms.ModelChoiceField(
queryset=TrainingCenter.objects.all(),
widget=EmptySelect
)
您也可以继承其他选择小部件,甚至可以将EmptySelect
转换为可以与任何选择小部件一起使用的mixin。