1

I have a django 1.7 with djangorestframework 3.3.2 site, and I'm migrating to django 1.11 with DRF 3.6. All things are working fine except routers with urls.

My Router:

router = routers.DefaultRouter()
router.register(r'options', MicrositeViewSet) 

My urls:

urlpatterns = [
    # '',
    url(r'^api/v1/', include(router.urls)),
]

My viewsets:

from django.shortcuts import get_object_or_404

from rest_framework import viewsets, mixins
from rest_framework.authentication import SessionAuthentication, TokenAuthentication
from rest_framework.response import Response
from rest_framework.permissions import IsAdminUser

from microsites.permissions import AccountPermission
from microsites.models import Microsite
from microsites.serializers import SelfManagedMicrositeSerializer, MicrositeTestProfileSerializer


class MicrositeViewSet(mixins.UpdateModelMixin,
                       mixins.ListModelMixin,
                       mixins.RetrieveModelMixin,
                       viewsets.GenericViewSet):
    """
    A viewset for viewing and editing microsites.
    """
    authentication_classes = (SessionAuthentication,)
    permission_classes = (AccountPermission,)

    serializer_class = SelfManagedMicrositeSerializer
    queryset = Microsite.objects.all()

    def list(self, request, *args, **kwargs):
        microsite = request.microsite
        account = request.account

        queryset = Microsite.objects.filter(account=account)
        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

    def retrieve(self, request, pk=None):
        queryset = self.get_queryset()
        microsite = get_object_or_404(queryset, api_key=pk)
        self.check_object_permissions(self.request, microsite)
        microsite.pull()
        microsite.set_request_user(request.user)
        serializer = self.get_serializer(
            microsite,
            metadata=request.GET.get('metadata', False),
            categories=request.GET.get('categories', False),
        )
        return Response(serializer.data)

    def update(self, request, pk=None, *args, **kwargs):
        partial = kwargs.pop('partial', False)

        queryset = self.get_queryset()
        microsite = get_object_or_404(queryset, api_key=pk)
        serializer = self.get_serializer(microsite, data=request.data, partial=partial)
        serializer.is_valid(raise_exception=True)
        self.perform_update(serializer)

        return Response(serializer.data)

This code exactly as it is works with django 1.7 and DRF 3.2, but in django 1.11 and DRF 3.6 does not calls the urls of the router. Any clues? I thought that could be router.ulr with quotes, but says I don't have any urlpatterns in routers.

dfrojas
  • 673
  • 1
  • 13
  • 32

0 Answers0