Привет, я хочу отфильтровать одну из моих моделей Api по одному полю. При создании набора запросов для представления мне нужно использовать всю модель, используя model.objects.all () и сериализатор модели. После того, как я установил набор фильтров, параметр, который я хочу фильтровать.
Он правильно фильтрует, когда я обращаюсь напрямую, но проблема в том, что когда я обращаюсь к 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']
Те это мой 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
Вот urls.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'),
]
Например, если я go на URL : localhost: 8000 / busquedaciudad /? ciudad = somecity он возвращает мне правильно отфильтрованные объекты, но если я попробую localhost: 8000 / busquedaciudad /, он даст мне все объекты модели в базе данных, а также если я оставил параметр ciudad пустым, например : localhost: 8000 / busquedaciudad /? ciudad =
И я хочу, чтобы URL-адрес был похож на: localhost: 8000 / busquedaciudad / или localhost: 8000 / busquedaciudad /? ciudad = re повернуть 0 объектов вместо всех.
Есть идеи? Спасибо