如何在 django rest 框架中请求过滤视图集
How to request a filtered viewset in django restframwork
我需要使用 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' }
它 returns 这个错误:
KeyError at /categories/api/api/get_products/
'category_name'
您的 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)
我需要使用 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' }
它 returns 这个错误:
KeyError at /categories/api/api/get_products/
'category_name'
您的 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)