Python 如何使用一个get请求返回多个列表?
我想为我的Django应用程序编写一个获取三个列表的请求。我想对我的数据库应用一个过滤器,并在一个响应中以不同的列表返回它们。这是我想要的三个列表,我想用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()
{“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))
]