def create(self, request, *args, **kwargs): """ Create Indicator objects via csv upload or json Upload csv with the following POST DATA: city_name: String field with city name to use as a reference in the database for this indicator set source_file: File field with the csv file to import """ # Handle as csv upload if form data present source_file = request.FILES.get('source_file', None) if source_file: city_name = request.DATA.pop('city_name', None) ## Moving city_name to IndicatorJob causes this to serialize to a list if city_name and type(city_name) is list: city_name = city_name.pop(0) load_status = Indicator.load(source_file, city_name, request.user) response_status = status.HTTP_200_OK if load_status.success else status.HTTP_400_BAD_REQUEST return Response(load_status.__dict__, status=response_status) # Fall through to JSON if no form data is present # If this is a post with many indicators, process as many if isinstance(request.DATA, list): many = True else: many = False # Continue through normal serializer save process serializer = self.get_serializer(data=request.DATA, files=request.FILES, many=many) if serializer.is_valid(): self.pre_save(serializer.object) self.object = serializer.save(force_insert=True) self.post_save(self.object, created=True) headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def create(self, request, *args, **kwargs): """ Create Indicator objects via csv upload or json Upload csv with the following POST DATA: city_name: String field with city name to use as a reference in the database for this indicator set source_file: File field with the csv file to import """ # Handle as csv upload if form data present source_file = request.FILES.get('source_file', None) if source_file: city_name = request.DATA.pop('city_name', None) ## Moving city_name to IndicatorJob causes this to serialize to a list if city_name and type(city_name) is list: city_name = city_name.pop(0) load_status = Indicator.load(source_file, city_name, request.user) response_status = status.HTTP_200_OK if load_status.success else status.HTTP_400_BAD_REQUEST return Response(load_status.__dict__, status=response_status) # Fall through to JSON if no form data is present # If this is a post with many indicators, process as many if isinstance(request.DATA, list): many=True else: many=False # Continue through normal serializer save process serializer = self.get_serializer(data=request.DATA, files=request.FILES, many=many) if serializer.is_valid(): self.pre_save(serializer.object) self.object = serializer.save(force_insert=True) self.post_save(self.object, created=True) headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)