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,)
我正在尝试使用 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
中定义了这样的 URLrouter_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,)