我现在正在重构我的REST API。使用router
代替直接URL后,我无法启动我的项目。我哪里错了?
错误:
TypeError: as_view() takes exactly 1 argument (3 given)
models.py:
class Device(models.Model):
...
class Measure(models.Model):
device = models.ForeignKey(Device)
...
class PeriodAverage(models.Model):
measure = models.ForeignKey(Measure)
urls.py:
router = routers.DefaultRouter()
router.register(r'devices', views.DevicesList)
router.register(r'devices/{pk}/measures', views.MeasuresList, 'Measure')
router.register(r'measures/{pk}/averages', views.PeriodAveragesList, 'Average')
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/v1/', include(router.urls)),
]
views.py:
class DevicesList(viewsets.ModelViewSet):
queryset = Device.objects.all()
serializer_class = serializers.DeviceSerializer
class MeasuresList(viewsets.ModelViewSet):
serializer_class = serializers.MeasureSerializer
def get_queryset(self):
...
class PeriodAveragesList(ListAPIView):
serializer_class = serializers.PeriodAverageSerializer
def get_queryset(self):
...
路由器与ViewSet
s配合使用。您的PeriodAveragesList
extendsListAPIView
是基于类的视图,而不是ViewSet
。
如果您仍要在该视图中使用路由器,请参阅此答案以获取解决方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句