繁体   English   中英

如何在 django restframework 中请求过滤的视图集

[英]How to request a filtered viewset in django restframwork

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

这是我的 API 代码:

网址.py

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

视图.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'

您的 API 方法是 GET 方法。 你不能用 get 方法接受 body。 您可以使用 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM