Django形成了ModelMultipleChoiceField,有10K选项

时间:2016-02-22 19:49:22

标签: django django-forms

我的表单上有一个名为location的文件,我不需要预先加载所有选项,因为渲染需要很长时间。所以这就是我所拥有的:

class SearchForm(forms.Form):
    location = forms.ModelMultipleChoiceField(
        required=False,
        label='Location',
        queryset=Location.objects.none()
    )

我使用ajax提供了自动完成功能。问题是表单验证失败,因为所选值不在queryset中。有没有办法可以跳过location的验证或类似的东西?

编辑:

我找到了办法,但我认为这不是最佳选择:

class SearchForm(forms.Form):
location = forms.MultipleChoiceField(
    required=False,
    label='Location',
    validators=[]
)

我已将validators = []添加到我的位置字段,并将ModelMultipleChoiceField更改为MultipleChoiceField。现在,在我的save函数中,我有这个:

def save(self):
    if not self.is_valid():
        return false

    locations = Location.objects.filter(id__in=self.data.getlist('location')).all()

由于locations不在cleaned_data,我只是使用data中传递的位置ID查询数据库。

我仍然不认为这是一种干净的方式,所以任何其他解决方案都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

你可以使用Django的django-autocomplete-light库。

这个库非常容易使用,负载是通过Ajax调用。

这是完整详情的链接

django-autocomplete-light