在没有数据的情况下初始化 ModelMultipleChoiceField 时 Django 表单不验证

Django form doesn't validate when init ModelMultipleChoiceField without data

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

这是 forms.py :

#forms.py
class SymbolForm(forms.Form):
    symbol = forms.ModelMultipleChoiceField(queryset=Symbol.objects.all(), label='symbol')

除了一件事,一切都很好。 Symbol table 有大约 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 没有允许这个。

我能做什么?

通过使用 question and Sergio答案,我发现我需要重写表单的初始化方法:

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