Ошибка: ключевые слова __init __ () должны быть строками - PullRequest
0 голосов
/ 04 марта 2019

Фильтр Django выдает ошибку при фильтрации по полю «многие ко многим».Похоже, что предикат сформирован неправильно, поскольку он сформирован как {None: [экземпляр ID]}. Я предполагаю, что он должен быть больше похож на {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 - это идентификатор соответствующего экземплярапытаясь отфильтровать.

1 Ответ

0 голосов
/ 04 марта 2019

Я решил эту проблему, правильно установив 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'}))
...