Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用一个get请求返回多个列表?_Python_Django_Django Rest Framework - Fatal编程技术网

Python 如何使用一个get请求返回多个列表?

Python 如何使用一个get请求返回多个列表?,python,django,django-rest-framework,Python,Django,Django Rest Framework,我想为我的Django应用程序编写一个获取三个列表的请求。我想对我的数据库应用一个过滤器,并在一个响应中以不同的列表返回它们。这是我想要的三个列表,我想用{“to do”,“in progress”,“Done”}对它们进行过滤 有没有一种方法可以在一个响应中返回多个列表?或者我必须为它们中的每一个编写不同的API吗 这是我的视图。py: class AllCardstView(generics.ListAPIView): queryset = Card.objects.all()

我想为我的Django应用程序编写一个获取三个列表的请求。我想对我的数据库应用一个过滤器,并在一个响应中以不同的列表返回它们。这是我想要的三个列表,我想用
{“to do”,“in progress”,“Done”}
对它们进行过滤

有没有一种方法可以在一个响应中返回多个列表?或者我必须为它们中的每一个编写不同的API吗

这是我的
视图。py

class AllCardstView(generics.ListAPIView):
    queryset = Card.objects.all()
    permission_classes = (IsAuthenticated,)
    serializer_class = Card_Serializer.CardAssigneeSerializer

    def get(self, request, pk=None):

        req_check = have_queryparams(request, 'team_pk')

        if not req_check.have_all:
            return Response({'error': req_check.error_message}, status=status.HTTP_400_BAD_REQUEST)
        team_pk = request.query_params.get("team_pk")

        cradlistDone = Card.objects.filter(team=team_pk).filter(status="Done")
        cradlistInProgress = Card.objects.filter(team=team_pk).filter(status="In progress")
        cradlistToDo = Card.objects.filter(team=team_pk).filter(status="TO DO")
        workspace_cards={}
        workspace_cards['ToDO'] = Card_Serializer.CardAssigneeSerializer(cradlistToDo, many=True)
        workspace_cards['InProgress'] = Card_Serializer.CardAssigneeSerializer(cradlistInProgress, many=True)
        workspace_cards['Done'] = Card_Serializer.CardAssigneeSerializer(cradlistDone, many=True)
        serializer=workspace_cards
        return Response(serializer, status=status.HTTP_200_OK)
但我有一个错误:

File "/usr/local/lib/python3.7/json/encoder.py", line 179, in default
 raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type ListSerializer is not JSON serializable
[15/May/2021 16:53:31] "GET /api/v1/postideas/all_card/?team_pk=1 HTTP/1.1" 500 120731

如果您想编写restful API,那么对资源URL的GET HTTP请求应该返回资源列表

假设您的资源是任务,在models.py中表示如下

在你的app/models.py中

在您的应用程序中/serializers.py

在你的app/views.py中

在你的应用程序中/url.py

之后,当客户端向“/v1/task/”发出HTTP get请求时,将返回所有任务


如果要按任务状态获取任务,可以设置和配置视图集。然后,您可以通过HTTP get请求/v1/task/?status='in_progress

根据任务的状态筛选任务,到底是什么问题?我不知道有没有办法在一个响应中返回多个列表?或者我应该为它们中的每一个编写不同的API。这取决于你,你的端点可以返回你喜欢的任何东西。可能是一个端点返回包含单独列表的响应,可能是一个由客户端拆分的列表,可能是单独的端点。非常感谢!我已经更新了我的问题。请您重新检查一下好吗?您应该像下面这样修复get方法中的最后一行。返回响应(serializer.data,status=status.HTTP_200_OK)(只需将serializer更改为serializer.data)我尝试了此操作,但出现了以下错误:“AttributeError:'dict'对象没有属性'data'”
class Task(models.Model):
    status = models.CharField(
        choices=[
           ('todo', 'To Do'), 
           ('in_progress', 'In Progress'),
           ('done', 'Done')
        ]
    )
class TaskSerializer(serializers.ModelSerializer):
    class Meta:
        fields = '__all__'
class TaskViewset(serializers.ModelViewset):
    queryset = Task.objects.all()
    serializer_class = TaskSerializer
router = routers.DefaultRouter()
router.register(r'task', TaskViewset)

urlpatterns = [
    path("v1/", include(router.urls))
]