使用SimpleRou的ViewSet出现Django错误

2024-09-30 04:33:00 发布

您现在位置:Python中文网/ 问答频道 /正文

在视图.py在

from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework import generics
from ticker.serializers import PriceSerializer
from ticker.models import Price
import datetime
from nexchange.settings import DEFAULT_HOUR_RANGE


class LastPricesViewSet(viewsets.ViewSet):
    def list(self, request):
        queryset = Price.objects.filter().order_by('-id')[:2]
        serializer = PriceSerializer(queryset, many=True)
        return Response(serializer.data)


class PriceHistoryViewSet(generics.ListAPIView):
    serializer_class = PriceSerializer

    def get_queryset(self, request):
        hours = self.request.query_params.get('hours', DEFAULT_HOUR_RANGE)
        relevant = datetime.datetime.now() - datetime.timedelta(seconds=hours * 3600)
        queryset = Price.objects.filter(created_on__gte=relevant).order_by('id')
        return queryset

在网址.py公司名称:

^{pr2}$

runserver(不带basename kwarg)期间引发以下错误: AssertionError:基名称argument not specified, and could not automatically determine the name from the viewset, as it does not have a.querysetattribute.

但是,当我添加希望的basename时,错误变为: TypeError: as_view() takes 1 positional argument but 2 were given

我怀疑这可能与在一个路由器中组合ViewSet和ListAPIView有关。在


Tags: frompyimportselfrestdatetimerequestnot
1条回答
网友
1楼 · 发布于 2024-09-30 04:33:00

解决方案: 必须从viewsets.ViewSetMixin继承来实现ViewSetClass向DRF路由器注册所需的方法,否则可以使用简单的Djangourlconf表示法。在

views.py:

class PriceHistoryViewSet(viewsets.ViewSetMixin, generics.ListAPIView):
    serializer_class = PriceSerializer

    def get_queryset(self, *args, **kwargs):
        hours = self.request.query_params.get('hours', DEFAULT_HOUR_RANGE)
        relevant = datetime.datetime.now() - datetime.timedelta(seconds=hours * 3600)
        queryset = Price.objects.filter(created_on__gte=relevant).order_by('id')
        return queryset

urls.py:

^{pr2}$

相关问题 更多 >

    热门问题