Reputation: 5438
I'm refactoring my REST API now. After using router
instead of direct urls I can't launch my project. Where am I wrong?
Error:
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):
...
Upvotes: 1
Views: 57
Reputation: 59445
Routers work with ViewSet
s. Your PeriodAveragesList
extends ListAPIView
, which is a class based view, not a ViewSet
.
If you still want to use a router for that view, see this answer for a workaround.
Upvotes: 2