Django 如何在一个API视图中实现创建和更新。?

Django 如何在一个API视图中实现创建和更新。?,django,django-rest-framework,Django,Django Rest Framework,我有一个名为CarDetailsAdd和VehicleDetails(字段描述)的模型,VehicleDetails是到CarDetailsAdd的外键。我在此序列化程序中使用嵌套关系。使用此更新功能,我可以更新现有的车辆详细信息。根据用户界面,在同一屏幕上添加和更新运行。如果用户已更新该字段,则应更新该字段,或者用户已添加新字段,则应添加该字段。如果用户同时更新和添加,我该怎么做 如果车辆有主钥匙,则会对其进行更新。如果没有,它将被添加。另外,请查看此包。您不必滚动自己的嵌套模型序列化程序:

我有一个名为CarDetailsAddVehicleDetails(字段描述)的模型,VehicleDetails是CarDetailsAdd的外键。我在此序列化程序中使用嵌套关系。使用此更新功能,我可以更新现有的车辆详细信息。根据用户界面,在同一屏幕上添加和更新运行。如果用户已更新该字段,则应更新该字段,或者用户已添加新字段,则应添加该字段。如果用户同时更新和添加,我该怎么做


如果车辆有主钥匙,则会对其进行更新。如果没有,它将被添加。另外,请查看此包。您不必滚动自己的嵌套模型序列化程序:如果车辆具有主键,则它将被更新。如果没有,它将被添加。这是我want@RossRogers当前位置我从那个包裹里得到了我真正需要的东西。感谢您试用如果车辆有主钥匙,则正在更新。如果没有,它将被添加。另外,请查看此包。您不必滚动自己的嵌套模型序列化程序:如果车辆具有主键,则它将被更新。如果没有,它将被添加。这是我want@RossRogers当前位置我从那个包裹里得到了我真正需要的东西。谢谢你的夸奖
# 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)