django_filters 按字段过滤无效

django_filters filtering by a field not working

我正在尝试使用 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

这是我的过滤器 class:

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"]

我在 urls.py

中定义了这样的 URL
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 的服务。 谁能帮忙?我错过了什么吗?

你可能错过了:

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,)