Фильтр django_filters по полю не работает - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь использовать django_filters для фильтрации модели по полю.

это модели:

class Provider(models.Model):
    name=models.CharField(max_length=100)
    lat=models.DecimalField(max_digits=9,decimal_places=6)
    lon=models.DecimalField(max_digits=9,decimal_places=6)
    address_line1=models.CharField(max_length=255)
    address_line2=models.CharField(max_length=255)
    user=models.ForeignKey(User,on_delete=models.CASCADE)


    class Meta:
        db_table='providers'


class Service(models.Model):
    name = models.CharField(max_length=50)
    provider=models.ForeignKey(Provider,on_delete=models.CASCADE)
    class Meta:
        db_table='services'

Я использую ModelViewSet

class ServiceList(viewsets.ModelViewSet):

    queryset=Service.objects.all()
    serializer_class=ServiceSerilaizer
    filterset_class=ServiceFilter

и вот мой класс Filter:

from django_filters import rest_framework as filters

class ServiceFilter(filters.FilterSet):
    provider=filters.NumberFilter(lookup_expr='iexact')
    class Meta:
        model=Service
        fields=["provider_id"]

Я определил URL-адрес, как этот, в своем urls.py

router_service = routers.DefaultRouter()
router_service.register("services", ServiceList, basename='services')



urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^api/', include(router_service.urls)),
    path('api/auth/',include('djoser.urls')),
    path('api/auth/',include('djoser.urls.authtoken')),
]

Теперь, когда я нажимаю на URL: http://127.0.0.1:8000/api/services/?provider_id=1

Я получаю все услуги, не только те, которые для provider_id = 1. Кто-нибудь может помочь? Я что-то упустил?

1 Ответ

1 голос
/ 15 февраля 2020

Возможно, вам не хватает:

DEFAULT_FILTER_BACKENDS": ( "django_filters.rest_framework.DjangoFilterBackend", ),

в вашем setting.py файле

В качестве альтернативы, вы также можете установить это в вашем наборе следующим образом:

class ServiceList(viewsets.ModelViewSet):

    queryset=Service.objects.all()
    serializer_class=ServiceSerilaizer
    filterset_class=ServiceFilter
    filter_backends = (filters.DjangoFilterBackend,)
...