Django 表单在初始化时不验证 模型多选字段 没有数据



我想在我的Django应用程序中使用ModelMultipleChoiceFieldselect2

这是forms.py:

#forms.py
class SymbolForm(forms.Form):
symbol = forms.ModelMultipleChoiceField(queryset=Symbol.objects.all(), label='symbol')
一切都很好,除了一件事。Symbol表大约有5000条记录,当html呈现时,所有数据都传递给html模板。我不想要。

我改变了我的形式:

# forms.py
class SymbolForm(forms.Form):
symbol = forms.ModelMultipleChoiceField(queryset=Symbol.objects.all(), label='symbol')
def __init__(self, *args, **kwargs):
super(SymbolForm, self).__init__(*args, **kwargs)
self.fields['symbol'].queryset = Symbol.objects.none()

初始化表单,不需要任何数据。新问题出现:当提交表单时,它是无效的,django说我选择的符号不合法。

事实上,我的问题是我想创建没有数据的表单,然后能够用我从select2获得的数据验证它,但Django不允许这样做。

我能做什么?

通过使用这个问题和Sergio的答案,我发现我需要重写form的init方法:

self.fields['symbol'].queryset = Symbol.objects.none()
if 'symbol' in self.data:
try:
symbols_ids_list = list(map(int,  self.data.getlist('symbol')))
self.fields['symbol'].queryset = Symbol.objects.filter(pk__in=symbols_ids_list).order_by()
except (ValueError, TypeError):
pass

最新更新