3

I have created a Django rest api using ModelViewSet. Deployed in staging and now in production.Production is working fine,but staging has some incorrect "next" url.

enter image description here enter image description here

See the key "next" in both images, first image is the staging response and second one is the production response.In staging next key, "nub.staging.scoretrends.com" appears twice.Same code is used in both environment.Working fine in localhost too.What makes it happened like this? The ModelViewSet is shown below.

class EntityDetail(viewsets.ModelViewSet):
    """
    Retrieve a spider.
    """
    queryset = Entity.objects.all()
    serializer_class = EntitySerializer
    filter_backends = (filters.DjangoFilterBackend, filters.OrderingFilter)
    filter_class = EntityFilter
    filter_fields = ('name', 'entity_type', 'gender', 'active', 'verified', 'date_created', 'date_modified')
    ordering_fields = ('name', 'date_created', 'date_modified')

    def get_queryset(self):
        queryset = Entity.objects.all()
        name = self.request.query_params.get('name', None)
        industry = self.request.query_params.get('industry', None)
        entity_types = self.request.query_params.get('entity_types', None)
        if name:
          queryset = Entity.objects.filter(name__icontains=name)
        if industry:
          queryset = Entity.objects.filter(meta__primary_industry__iexact=industry)
        if entity_types:
          entity_types = [int(id) for id in entity_types.split(',')]
          queryset = queryset.filter(entity_type__in=entity_types)
        return queryset

    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())
        if request.query_params.get('nopaginate') is None:
          page = self.paginate_queryset(queryset)
          if page is not None:
            serializer = EntitySerializer(page, many=True)
            return self.get_paginated_response(serializer.data)
        serializer = EntitySerializer(queryset, many=True)
        return Response(serializer.data)

   def update(self, request, *args, **kwargs):
        instance = self.get_object()
        serializer = EntitySerializer(instance, data=request.data, partial=True)
        serializer.is_valid(raise_exception=True)
        serializer.save(entity_id=instance.pk, **serializer.validated_data)
        return Response(serializer.data)

   def partial_update(self, request, *args, **kwargs):
       kwargs['partial'] = True
       return self.update(request, *args, **kwargs)

This is the django rest configuration that i have used

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 20,
    'DEFAULT_FILTER_BACKENDS': ('rest_framework.filters.DjangoFilterBackend',),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    )
}
Ferose
  • 384
  • 5
  • 13
  • it seems like an issue in your settings.py may be your var when you have listed your envirionments needs an extra colon. – Fer Mena Mar 12 '18 at 18:24

0 Answers0