def update_vehicle(self, request, pk): """ /api/users/<user_id>/vehicles/<vehicle_id> PUT - Update vehicle information """ serializer = VehicleUpdateSerializer(data=request.data) if serializer.is_valid(): try: vehicle = Vehicle.objects.get(plate=request.data['plate']) except Exception as e: return Response( { 'response': "Vehicle with the associated\ plate doesn't exists" }, status=404) if request.data.get('new_plate'): vehicle.plate = request.data.get('new_plate') if serializer.data.get('model'): vehicle.model = serializer.data.get('model') if serializer.data.get('color'): vehicle.color = serializer.data.get('color') if serializer.data.get('brand'): vehicle.brand = serializer.data.get('brand') vehicle.save() return Response({ 'response': 'Vehicle information \ updated successfully', 'vehicle': VehicleSerializer(vehicle).data }) return Response(serializer.errors)
def test_get_all_vehicles(self): # get API response response = client.get(reverse('get-vehicle-list')) # get data from db vehicles = Vehicle.objects.all() serializer = VehicleSerializer(vehicles, many=True) self.assertEqual(response.data, serializer.data) self.assertEqual(response.status_code, status.HTTP_200_OK)
def vehicle_detail(request, pk, format=None): """ Retrieve, update or delete a vehicle. """ try: vehicle = Vehicle.objects.get(pk=pk) except Vehicle.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'GET': serializer = VehicleSerializer(vehicle) return Response(serializer.data) elif request.method == 'PUT': serializer = VehicleSerializer(vehicle, data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) elif request.method == 'DELETE': vehicle.delete() return Response(status=status.HTTP_204_NO_CONTENT) elif request.method == 'POST': return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)
def test_get_valid_single_vehicle(self): """ Check validity of each single vehicle in the list """ for vehicle in self.valid_vehicle_list: response = client.get( reverse('get-vehicle-detail', kwargs={'pk': vehicle.pk})) # response = client.get('get-vehicle-detail/1234') vehicle_obj = Vehicle.objects.get(pk=vehicle.pk) serializer = VehicleSerializer(vehicle_obj) self.assertEqual(response.data, serializer.data) self.assertEqual(response.status_code, status.HTTP_200_OK)
def create_vehicle(self, request, pk): """ /api/users/<user_id>/vehicles POST - Create a new vehicle """ user = self.get_object() serializer = VehicleSerializer(data=request.data) if serializer.is_valid(): new_vehicle = Vehicle(plate=serializer.data['plate'], model=serializer.data['model'], color=serializer.data['color'], brand=serializer.data['brand'], user=user) new_vehicle.save() return Response( { 'response': 'Vehicle registered successfully', 'vehicle': VehicleSerializer(new_vehicle).data }, status=201) return Response(serializer.errors, status=400)
def listing(request): doctors = Person.objects.filter(title='Dr.') vehicles = Vehicle.objects.all() context = { 'request': request, } vehicles_serializer = VehicleSerializer(vehicles, many=True, context=context) results = { 'doctors': PersonSerializer(doctors, many=True).data, 'vehicles': vehicles_serializer.data, } return Response(results)
def vehicle_list(request, format=None): """ List all vehicles, or create a new one. """ if request.method == 'GET': vehicles = Vehicle.objects.all() serializer = VehicleSerializer(vehicles, many=True) return Response(serializer.data) elif request.method == 'POST': serializer = VehicleSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class TripSerializer(serializers.HyperlinkedModelSerializer): origin_id = serializers.PrimaryKeyRelatedField( queryset=Place.objects.all(), source='origin', write_only=True) origin = PlaceSerializer(read_only=True) destination_id = serializers.PrimaryKeyRelatedField( queryset=Place.objects.all(), source='destination', write_only=True) destination = PlaceSerializer(read_only=True) vehicle_id = UserFilteredPrimaryKeyRelatedField(queryset=Vehicle.objects, source='vehicle', write_only=True) vehicle = VehicleSerializer(read_only=True) driver = UserSerializer(source='user', read_only=True) def validate_trip_date(self, value): if value < date.today(): raise serializers.ValidationError( 'Trip date cannot be in the past') return value def validate(self, data): if data['origin'] == data['destination']: raise serializers.ValidationError( 'Origin and destination cannot be the same') return data class Meta: model = Trip fields = [ 'id', 'url', 'trip_date', 'num_seats', 'origin_id', 'origin', 'destination_id', 'destination', 'vehicle_id', 'vehicle', 'driver', ]
def vehicle_detail(request, pk): vehicle = Vehicle.objects.get(pk=pk) if request.method == 'GET': try: serializer = VehicleSerializer(vehicle) print(serializer.data) return JsonResponse(serializer.data) except Vehicle.DoesNotExist: return HttpResponse('No enviaste un solicitante con valor valido.') elif request.method == 'PUT': data = JSONParser().parse(request) serializer = VehicleSerializer(vehicle, data=data) if serializer.is_valid(): serializer.save() return JsonResponse(serializer.data) return JsonResponse(serializer.errors, status=400)
def vehicles(self, request, pk): """ /api/users/<user_id>/vehicles GET - Return list of vehicles of a user """ user = self.get_object() vehicles = Vehicle.objects.filter(user=user) serializer = VehicleSerializer(vehicles, many=True) if len(serializer.data): return Response({ 'response': 'Succesful request', 'vehicles': serializer.data }) else: return Response( { 'response': "User doesn't have\ any vehicle registered" }, status=404)