首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Django检索特定类别的项目并绘制地图并作出反应

如何使用Django检索特定类别的项目并绘制地图并作出反应
EN

Stack Overflow用户
提问于 2022-06-22 16:15:23
回答 1查看 67关注 0票数 0

我试图获取一个特定类别的项目,然后在react应用程序中通过这个类别进行映射。我使用Django restframework创建了一个API,该框架返回此类类别的项,但使用的是post请求。以下是代码:

代码语言:javascript
运行
复制
 ​class​ ​ProductCategoryView​(​APIView​): 
 ​    ​serializer_class​ ​=​ ​ProductSerializer 
 ​    ​permission_classes​ ​=​ (​permissions​.​AllowAny​, ) 
  
 ​    ​def​ ​post​(​self​, ​request​, ​format​=​None​): 
 ​        ​data​ ​=​ ​self​.​request​.​data 
 ​        ​category​ ​=​ ​data​[​'category'​] 
 ​        ​queryset​ ​=​ ​Product​.​objects​.​order_by​(​'-dateCreated'​).​filter​(​category__iexact​=​category​) 
 ​        ​serializer​ ​=​ ​ProductSerializer​(​queryset​, ​many​=​True​) 
 ​        ​return​ ​Response​(​serializer​.​data​)

例如,假设我在数据库中有3类项目(教科书、期刊和小说)。在react前端应用程序中,我只想检索教科书,通过一系列教科书进行映射,并显示每本教科书,而不显示来自其他类别的任何项目。但是,由于我使用post请求,所以在实现它时遇到了困难。通过将特定类别传递给请求主体,我将返回该类别中的项。是否可以使用、get、request、并从数据库中筛选项目,这样我就只能获得教科书类别下的项目了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-22 17:08:06

是的,您也可以使用get实现。对于搜索和过滤,我通常使用通用的ListAPIView,它也具有良好的分页功能。

代码语言:javascript
运行
复制
from rest_framework import generics

class ProductCategoryView​(​generics.ListAPIView​):
    serializer_class​ ​=​ ​ProductSerializer
    permission_classes​ ​=​ (​permissions​.​AllowAny​, )
    queryset = Product.objects.all()
    
    def get_queryset(self):
        category = self.request.GET.get('category')
        # other_filter = self.request.GET.get('other_filter')
        qs = super().get_queryset()
        if category:
            qs = qs.filter(​category__iexact​=​category)
        # if other_filter:
        #    qs = qs.filter(other_field=other_field)
        return qs

你的url会像这样

/产品-清单/?类别=教科书

/product-list/?category=textbooks&other_filter=other

如果您仍然想继续使用上面的代码,可以更改如下所示

代码语言:javascript
运行
复制
def get(self, request, format=None):
    category = request.GET.get('category')
    qs = Product.objects.all()
    if category:
        qs = qs.filter(category__iexact=category)
    serializer = self.serializer_class(qs, many=True)
    return Response(serializer.data)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72718844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档