【问题标题】:Use modern GET parameters with DRF Router将现代 GET 参数与 DRF 路由器一起使用
【发布时间】:2021-04-03 11:59:52
【问题描述】:

目标是接受问号后面的GET参数,例如

api/items?name=apple?starting=10_10_2020

奇怪但简单的路由器path('api/items) 不工作

我应该添加一些东西吗? 谢谢

【问题讨论】:

  • 这个“现代”怎么来的?您应该使用与号 (&) 分隔不同的查询字符串参数
  • 请包括您的路由器和视图。
  • 你不需要任何东西来接受查询参数
  • @AKX 表示它应该看起来像 api/items&name=apple&starting=2020 ?

标签: django django-rest-framework


【解决方案1】:

您可以为此使用默认路由器。您可以使用此示例根据您的要求对其进行映射。
urls.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 访问项目

【讨论】:

    猜你喜欢
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多