#django #django-filter
#django #django-фильтр
Вопрос:
У меня есть две простые модели, которые связаны внешним ключом:
models.py:
class Operator(models.Model):
operator = models.CharField(max_length=50, primary_key=True, verbose_name='Operator')
operator_name = models.CharField(max_length=100, verbose_name='Operator Name', blank=False, null=False)
class SubOperator(models.Model):
operator = models.ForeignKey(Operator, on_delete=models.CASCADE)
sub_operator = models.CharField(max_length=50, verbose_name='Sub Operator')
sub_operator_name = models.CharField(max_length=100)
start_date = models.DateField(blank=False, null=False, verbose_name='Start Date')
end_date = models.DateField(blank=False, null=False, verbose_name='End Date')
Пользователь должен иметь возможность выбрать оператор с «like», который переводится как «lookup_expr=’contains'» в модуле Django-Filter, но, к сожалению, я получаю следующее исключение:
«django.core.exceptions.Ошибка поля: в соответствующем поле получен неверный поиск: содержит»
filters.py:
operator = django_filters.CharFilter(field_name='operator', lookup_expr='contains', label='Operator')
Ответ №1:
Измените свой field_name
аргумент на operator__operator_name
вместо operator
operator = django_filters.CharFilter(
field_name='operator__operator_name',
lookup_expr='contains',
label='Operator'
)
Ответ №2:
Только что нашел решение (документация немного вводит в заблуждение относительно того, как правильно написать выражение поиска с моей точки зрения, но, возможно, это только я ^^)
Правильный способ написать это:
operator = django_filters.CharFilter(field_name='operator', lookup_expr='operator__contains', label='Operator')
Так что более или менее, если вы возьмете свой стандартный объект фильтра и проверите, какие параметры он дает вам для поля, вот что вы можете поместить в lookup_expr фильтра django!