目标是接受问号后面的GET参数,例如api/items?name=apple?starting=10_10_2020奇怪但简单的路由器path('api/items)不工作我该加点什么吗?谢谢
api/items?name=apple?starting=10_10_2020
path('api/items)
2fjabf4q1#
您可以使用默认路由器来实现此目的。您可以使用此示例来根据您的需求Map它。
url.py
from django.urls import path, include from rest_framework import routers from .views import ItemsViewSet router = routers.DefaultRouter() router.register(r'items', ItemsViewSet, basename='items') urlpatterns = [ path('', include(router.urls)),]
views.py
class ItemsViewSet(viewsets.ModelViewSet): serializer_class = ItemsSerializer def get_queryset(self): name = self.request.query_params.get('name', None) starting = self.request.query_params.get('starting', None) queryset = Items.objects.filter(name=apple, starting=starting) return queryset
serializers.py
from rest_framework import serializers from .models import Items class ItemsSerializer(serializers.ModelSerializer): class Meta: model = Items fields = '__all__'
现在您可以使用此url api/items?name=apple&starting=10-10-2020访问项目
api/items?name=apple&starting=10-10-2020
6fe3ivhb2#
另一种处理视图的方法是使用DjangoFilterBackend,如果你愿意从django_filters导入:
from django_filters.rest_framework import DjangoFilterBackend class ItemsViewSet(viewsets.ModelViewSet): serializer_class = ItemsSerializer filter_backends = [DjangoFilterBackend] filterset_fields = ['name', 'starting']
使用这种方法,参数是可选的,而如果没有提供参数,上述方法将查询name=None和starting=None。
2条答案
按热度按时间2fjabf4q1#
您可以使用默认路由器来实现此目的。您可以使用此示例来根据您的需求Map它。
url.py
views.py
serializers.py
现在您可以使用此url
api/items?name=apple&starting=10-10-2020
访问项目6fe3ivhb2#
另一种处理视图的方法是使用DjangoFilterBackend,如果你愿意从django_filters导入:
使用这种方法,参数是可选的,而如果没有提供参数,上述方法将查询name=None和starting=None。