Stock related fields are defines in products (functional field) and directly from the product you can get the stock for all warehouses / locations or for individual location / warehouse.
Example:
For all warehouses / locations
product = self.env['product.product'].browse(PRODUCT_ID)
available_qty = product.qty_available
For individual location / warehouse (WAREHOUSE_ID / LOCATION_ID should be replaced by actual id)
product = self.env['product.product'].browse(PRODUCT_ID)
available_qty = product.with_context({'warehouse' : WAREHOUSE_ID}).qty_available
available_qty = product.with_context({'location' : LOCATION_ID}).qty_available
Other fields are also there.
Forecasted Stock => virtual_available
Incoming Stock => incoming
Outgoing Stock => outgoing
You can access all those fields in similar manner. If you will not pass any warehouse / location in context then it will returns the stock of the all warehouses together.
For more details you may refer product.py in stock module.
Solution:
@api.onchange('product_id','source_location')
def product_qty_location_check(self):
if self.product_id and self.source_location:
product = self.product_id
available_qty = product.with_context({'location' : self.source_location.id}).qty_??available
print available_qty
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…