【问题标题】:How to request a filtered viewset in django restframwork如何在 django rest 框架中请求过滤的视图集
【发布时间】:2020-02-26 19:07:14
【问题描述】:

我需要通过使用 Django rest 框架调用 HTTP 请求来检索一组过滤的数据。

这是我的 API 代码:

urls.py

urlpatterns = [
    path('api/get_products/', views.get_products),
]

Views.py

@api_view(["GET", ])
def get_products(request):
    category_name = request.data['category_name']
    category_obj = Category.objects.get(name=category_name)
    products_list = Product.objects.filter(category=category_obj)
    serializer = ProductSerializers(products_list)
    return Response(serializer.data)

最后是 serialierz.py

class CategorySerializers(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Category
        fields = ['name', 'id']


class ProductSerializers(serializers.HyperlinkedModelSerializer):
    category = CategorySerializers()

    class Meta:
        model = Product
        fields = '__all__'

并尝试使用带有参数的 get 请求调用它:{'category_name':'the_name_of_the_category' }

它返回此错误:

KeyError at /categories/api/api/get_products/
'category_name'

【问题讨论】:

    标签: python django django-rest-framework httprequest


    【解决方案1】:

    您的 API 方法是 GET 方法。您不能使用 get 方法接受正文。您可以使用 POST 方法或更好的方法更改您的 API 方法,您可以使用 url 获取“category_name”。您可以像这样添加 url 变量:

    path('api/get_products/<slug:category_name>', views.get_products),
    

    和你的视图方法:

    def get_products(request,category_name):
        category_obj = Category.objects.get(name=category_name)
        products_list = Product.objects.filter(category=category_obj)
        serializer = ProductSerializers(products_list)
        return Response(serializer.data)
    

    【讨论】:

      猜你喜欢
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2020-08-08
      • 2012-12-24
      • 2017-05-27
      相关资源
      最近更新 更多