django字符串索引超出模板范围

时间:2014-09-16 18:25:21

标签: python django django-forms django-views

我正在尝试使用MultipleChoiceFields创建,我得到了非常奇怪的错误。

这是我的forms.py:

class FilterForm(forms.Form):
    def __init__(self,  *args, **kwargs):
        super(FilterForm, self).__init__(*args, **kwargs)
        self.fields['cities'] = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(),
                                                          choices=self.get_cities())
        self.fields['law_areas'] = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(),
                                                             choices=self.get_law_areas())

    lawyer_name = forms.CharField(max_length=50)

    def get_cities(self):
        cities_queryset = []
        for lawyer in User.objects.all():
            if lawyer.city not in cities_queryset:
                cities_queryset.append(lawyer.city)

        return cities_queryset

    def get_law_areas(self):
        return LawArea.objects.all()

这是我的views.py:

def lawyers(request):
    if request.method == "POST":
        pass
    else:
        form = FilterForm()

        return render(request, "lawyer_directory_v2.html", {"form": form})

最后我尝试在模板中使用我的表单:

{{ form.as_p }}

在这条确切的行上出现了错误:

IndexError at /lawyers/
string index out of range

我不知道如何调试这个或者可能出错的地方。如果您还有其他需要,请告诉我。

2 个答案:

答案 0 :(得分:2)

您的get_cities方法正在返回字符串列表。但ChoiceField需要表单中的元组列表(id,readable_value)。

答案 1 :(得分:0)

这种错误通常来自数据库中缺少的数据。

也许有些用户没有城市?