错误:__ init __()关键字必须为字符串

时间:2019-03-04 19:56:59

标签: django python-3.x django-filter

Django过滤器在通过多对多字段进行过滤时引发错误。看来该谓词的格式不正确,因为它的格式为{None:[instance id]},我认为它应该更像{id:[instance id]} 下面是我的相关代码和相关错误的副本。

self.filters['template'] = django_filters.MultipleChoiceFilter(
        choices=models.Template.objects.exclude(name__in=default_template_names).values_list('id', 'name'),
        widget=autocomplete.Select2Multiple(attrs={'data-placeholder': 'Template'}))


错误发生在这里:

django_filters/filters.py in filter at line 248
            v = None
        predicate = self.get_filter_predicate(v)
        if self.conjoined:
            qs = self.get_method(qs)(**predicate)
        else:
            q |= Q(**predicate)

谓词是:

{None: '66'}

66是尝试对其进行过滤的相关实例的ID。

1 个答案:

答案 0 :(得分:0)

我通过在创建过滤器时正确设置field_name kwarg来解决了这个问题。

self.filters['template'] = django_filters.MultipleChoiceFilter(
        field_name="template", # This is new!
        choices=models.Template.objects.exclude(name__in=default_template_names).values_list('id', 'name'),
        widget=autocomplete.Select2Multiple(attrs={'data-placeholder': 'Template'}))