Как реализовать создание и обновление в одном представлении API.? - PullRequest
1 голос
/ 11 октября 2019

У меня есть модель с именем CarDetailsAdd и VehicleDetails (поле - описание), VehicleDetails - это Foreignkey to CarDetailsAdd . Я использую Nested Relationship в этом сериализаторе. Используя эту функцию обновления, я могу обновить существующие данные автомобиля. Добавление и обновление выполняется на одном экране в зависимости от пользовательского интерфейса. Если пользователь обновил поле, оно должно быть обновлено или пользователь добавил новое поле, его следует добавить. Как это сделать, если пользователь обновляет и добавляет одновременно.?

(UI image)

# Serializer

class CarDetailsSerializer(serializers.ModelSerializer):
    vehicle_details = VehicleDetailsSerializer(many=True)

    class Meta:
        model = CarDetailsAdd
        fields = (
            'id', 'name', 'year', 'color', 'fuel_type',
            'vehicle_details',
        )
        read_only_fields = ['id']

    def update(self, instance, validated_data):

        vehicle_data = validated_data.pop('vehicle_details')

        vehicle = (instance.vehicle_details).all()

        vehicle = list(vehicle)

        instance.name = validated_data.get('name', instance.name)
        instance.year = validated_data.get('year', instance.year)
        instance.color = validated_data.get('color', instance.color)
        instance.fuel_type = validated_data.get('fuel_type', instance.fuel_type)
        instance.save()

        for vehicle_data in vehicle_data:
            vehicle = vehicle.pop(0)
            vehicle.description = vehicle_data.get('description', vehicle.description)
            vehicle.save()

        return instance

# View

class CarDetailsView(APIView):
    permission_classes = [IsAuthenticated]

    def put(self, request, pk, format=None):
        try:
            car = self.get_object(pk)
            serializer = CarDetailsSerializer(car, data=request.data)
            if serializer.is_valid():
                serializer.save()
                return Response({'response': 'Update Success', 'result': serializer.data})
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        except:
            return Response({'response': 'Oops! Something Went Wrong'}, status=status.HTTP_400_BAD_REQUEST)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...