嗨,我想按一个字段过滤我的一个Api模型。为视图构建查询集我需要使用model.objects.all()和模型序列化程序来使用整个模型。一旦我设置了filterset,我想过滤哪个参数
当我直接进行查询时,它会正确过滤,但问题是当我访问过滤器的url时,默认情况下它会显示此模型的所有元素,如果我搜索不存在的元素,它也会显示所有元素
这些是我的serializers.py到完整模型和筛选的
class EstacionSerializer(serializers.ModelSerializer):
pistas = PistaSerializer(read_only=True, many=True)
forfaits = ForfaitSerializer(read_only=True, many=True)
#owner = serializers.ReadOnlyField(source='owner.username')
class Meta:
model = Estacion
fields = ['nombre', 'ciudad', 'pais', 'descripcion',
'pistas', 'forfaits', 'km_esquiables', 'distancia_ciudad']
class EstacionBycFilterSet(filters.FilterSet):
class Meta:
model = Estacion
fields = ['ciudad']
这些是my views.py,其中使用完整序列化程序和过滤序列化程序
class EstacionViewSet(viewsets.ModelViewSet):
queryset = Estacion.objects.all()
serializer_class = EstacionSerializer
permission_classes = [permissions.IsAuthenticatedOrReadOnly,]
class EstacionByCiudad(viewsets.ModelViewSet):
queryset = Estacion.objects.all()
serializer_class = EstacionSerializer
permission_classes = [permissions.IsAuthenticatedOrReadOnly,]
filter_backends = (filters.DjangoFilterBackend,)
filterset_class = EstacionPorCiudadFilterSet
这里是url.py
router = routers.DefaultRouter()
router.register(r'estaciones', views.EstacionViewSet, basename='estaciones')
router.register(r'pistas', views.PistaViewSet, basename='pistas')
router.register(r'forfaits', views.ForfaitViewSet, basename='forfaits')
router.register(r'busquedaciudad', views.EstacionByCiudad, basename='EstbyCiudad')
from rest_framework.authtoken import views
urlpatterns = [
path('', include(router.urls)),
path('api-auth/', views.obtain_auth_token, name='ap-auth'),
]
例如,如果我转到url:localhost:8000/busquedaciudad/?ciudad=somecity,它将正确返回已筛选的对象,但如果我尝试使用localhost:8000/busquedaciudad/它将提供数据库中模型的所有对象,并且如果我将ciudad参数留空,例如:localhost:8000/busquedaciudad/?ciudad=
我想知道的是,如果url是:localhost:8000/busquedaciudad/或localhost:8000/busquedaciudad/?ciudad=返回0个对象,而不是所有对象
有什么想法吗?谢谢
目前没有回答
相关问题 更多 >
编程相关推荐