My tables are:
# models.py
class Warehouse(models.Model):
site_name = models.CharField(max_length=100)
class Item(models.Model):
item = models.CharField(max_length=100)
class WarehouseStockStatus(models.Model):
site_name = models.ForeignKey(Warehouse, on_delete=models.CASCADE)
item = models.ForeignKey(Item,on_delete=models.CASCADE,editable = False)
class Meta:
unique_together = (("site_name", "item"))
stock_opening_quantity = models.PositiveBigIntegerField(
default = 0,
editable = False
)
stock_consumption_quantity = models.PositiveBigIntegerField(
default = 0,
editable = False
)
current_inventory_level = models.PositiveBigIntegerField(
default = 0,
editable = False
)
class InventoryOpenings(models.Model):
site_name = models.ForeignKey(Warehouse, on_delete=models.CASCADE,related_name='openings')
transaction_number = models.BigAutoField(primary_key = True,
serialize = False)
class InventoryOpeningsDetails(models.Model):
transaction_number = models.ForeignKey(InventoryOpenings, on_delete=models.CASCADE)
item = models.ForeignKey(Item,on_delete=models.CASCADE)
opening_quantity = models.PositiveBigIntegerField(
default = 0,
editable = True
)
There is one Warehouse table, with one to many records in WarehouseStockStatus. There is one products or Items table for inventory control. Then there InventoryOpenings and InventoryOpeningsDetails table, where we select the warehouse, and then an item, add the opening_quantity field.
I want to update WarehouseStockStatus for this warehouse and item combination, updating the stock_opening_quantity and current_inventory_level fields in that table, with the opening value we are inputting for InventoryOpeningsDetails.
I am trying to place the code for it in admin.py, in InventoryOpeningsAdmin. Need help.
Tried this code in admin
class InventoryOpeningsAdmin(admin.ModelAdmin):
def after_saving_model_and_related_inlines(self, obj):
mysite = InventoryOpenings.objects.values_list('site_name',flat=True)[0]
myitem = InventoryOpeningsDetails.objects.values_list('item', flat=True)[0]
try:
warehouse_item = WarehouseStockStatus.objects.filter(Q(site_name=mysite, item=myitem)).select_related(Warehouse) #.update_or_create(site_name=mysite, item=myitem)
except WarehouseStockStatus.DoesNotExist:
WarehouseStockStatus.objects.create(site_name=mysite, item=myitem)
warehouse_item = WarehouseStockStatus.objects.filter(Q(site_name=mysite, item=myitem)).select_related(Warehouse)
stock_op_qty = WarehouseStockStatus.stock_opening_quantity
stock_cur_qty = WarehouseStockStatus.current_inventory_level
op_qty = InventoryOpeningsDetails.opening_quantity
updated_op_qty = stock_op_qty + op_qty
updated_cur_qty = stock_cur_qty + op_qty
warehouse_item.stock_opening_quantity = updated_op_qty
warehouse_item.current_inventory_level = updated_cur_qty
for allitems in warehouse_item:
warehouse_item.save()