Используйте предложение OR вместо AND в django-filter

Я работаю с django-filter + django rest framework. Я хочу искать термин с помощью выражения OR. У меня есть такой фильтр:

class ItemFilter(filters.FilterSet):
    name = filters.CharFilter(field_name="name")
    barcode = filters.CharFilter(field_name="barcode")

    class Meta:
        model = Item
        fields = ['name', 'barcode']

когда я отправляю параметр запроса типа https://url?barcode=q&name=q django-filter searchs:

SELECT * FROM item where name = 'q' AND barcode = 'q'

Как настроить поиск?:

SELECT * FROM item where name = 'q' OR barcode = 'q'

Одним из вариантов может быть использование SearchFilter в вашем представлении для фильтрации по нескольким полям:

from rest_framework import filters

class YourView(generics.ListAPIView):
    queryset = Item.objects.all()
    serializer_class = ...
    filter_backends = [filters.SearchFilter]
    search_fields = ['name', 'barcode']

А затем используйте ключевое слово search в параметрах запроса url: https://url?search=q

Вернуться на верх