В моем проекте я использую django rest framework. Для фильтрации результатов я использую бэкэнд django_filters. Вот мой код:
models.py
from django.db import models
class Region(models.Model):
name = models.CharField(max_length=100, blank=True, null=False)
class Town(models.Model):
region = models.ForeignKey(Region)
name = models.CharField(max_length=100, blank=True, null=False')
filters.py
import django_filters
from models import Town
class TownFilter(django_filters.FilterSet):
region = django_filters.CharFilter(name="region__name", lookup_type="contains")
town = django_filters.CharFilter(name="name", lookup_type="contains")
class Meta:
model = Town
fields = ['region', 'town']
views.py
from models import Town
from rest_framework import generics
from serializers import TownSerializer
from filters import TownFilter
class TownList(generics.ListAPIView):
queryset = Town.objects.all()
serializer_class = TownSerializer
filter_class = TownFilter
Итак, я могу написать ?region=Region_name&town=Town_name в конце URL-адреса запроса, и результат будет отфильтрован.
Но я хочу использовать только один параметр get в URL-адресе запроса, который может иметь значение регион или название города. Например, ?search=Region_name и ?search=Town_name. Как я могу это сделать?