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。
答案 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'}))