2016-02-22 46 views
0

我的表单上有一个名为location的域,我不需要预先加载所有选项,因为它需要很长时间才能呈现。所以这是我的:Django form 10M选项的ModelMultipleChoiceField

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 = []到我的位置字段,改变ModelMultipleChoiceFieldMultipleChoiceField。现在,在我的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查询数据库。

我仍然不认为这是一个干净的方式,所以任何其他解决方案将不胜感激。

回答

0

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

该库使用起来非常容易,并且负载是通过Ajax调用进行的。

这里是链接的完整细节

django-autocomplete-light

+0

感谢。我会检查出来的。但我想找到一种解决方法,无需任何外部插件。 – AliBZ

相关问题