在我的视图集中,我已经为filterset_fields提供了通过API端点查询模型的功能。我希望将检索到的查询集转换为dataframe,以便使用pandas处理模型中的数据。为此,我使用了django-pandas的to_dataframe()方法。
以下是视图集和视图集中使用的函数:
class StockPriceDataViewSet(mixins.ListModelMixin,
viewsets.GenericViewSet):
queryset = StockPriceData.objects.all()
serializer_class = StockPriceDataSerializer
filter_backends = [DjangoFilterBackend, SearchFilter]
filterset_fields = {
'date':['gte','lte'],
'org__symbol':['exact'],
'org__group':['exact'],
}
permission_classes = (AllowAny,)
@action(methods=['GET'], detail=False, url_path='stock')
def get_df(self, request):
queryset = self.queryset
result = generate_df(queryset=queryset)
return Response(result, status=status.HTTP_200_OK)def generate_df(queryset):
df = queryset.to_dataframe()
df = df.drop(['s_n','id'], axis=1)
result = df.to_json(orient='records', date_unit='ms', lines=True).splitlines()
return result在交互式shell中,当我为特定值过滤查询集时,它工作得很好。我在这里做错了什么?查询集过滤在get_df()的API端点上不起作用,而在queryset方法上正常工作。
此外,get_df()方法没有对数据进行分页。我可以在这里做些什么来实现这一点?
发布于 2021-02-17 16:57:11
在已设置为StockPriceData.objects.all()的方法中使用self.queryset,并且不对其进行过滤或分页。更改您的方法以执行这些任务:
def get_df(self, request):
queryset = self.filter_queryset(self.get_queryset())
paginator = self.paginator
page = None
if paginator:
paginator.paginate_queryset(queryset, self.request, view=self)
page = paginator.page # assuming PageNumberPagination
if page is not None:
result = generate_df(queryset=page.object_list)
return Response(result, status=status.HTTP_200_OK)
result = generate_df(queryset=queryset)
return Response(result, status=status.HTTP_200_OK)https://stackoverflow.com/questions/66238209
复制相似问题