0

我想在我的应用程序中使用ModelMultipleChoiceFieldwith 。select2Django

这是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.

我能做些什么?

4

1 回答 1

0

通过使用this question和Sergio answer,我发现我需要重写表单的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
于 2021-07-28T05:59:07.807 回答