我的桌子是:
模型.py
类仓库(models.Model): site_name = models.CharField(max_length=100)
类项目(模型.模型): item = models.CharField(max_length=100)
类 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
)
类 InventoryOpenings(models.Model):
site_name = models.ForeignKey(Warehouse, on_delete=models.CASCADE,lated_name='openings')
transaction_number = models.BigAutoField(primary_key = True,
序列化=假)
类 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
)
有一张Warehouse表,WarehouseStockStatus中有一对多的记录。 有一个产品或项目表用于库存控制。 然后是InventoryOpenings和InventoryOpeningsDetails表,我们在其中选择仓库,然后选择一个商品,添加opening_quantity字段。
我想更新此仓库和物料组合的 WarehouseStockStatus,更新该表中的 stock_opening_quantity 和 current_inventory_level 字段,以及我们为 InventoryOpeningsDetails 输入的期初值。
我试图将其代码放在 InventoryOpeningsAdmin 的 admin.py 中。需要帮助。
在管理中尝试了此代码
InventoryOpeningsAdmin 类(admin.ModelAdmin):
def after_ saving_model_and_lated_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()
类似这样的东西?,检查 Django Signals
from django.dispatch import receiver
from django.db.models.signals import post_save,pre_save
class Warehouse(models.Model):
site_name = models.CharField(max_length=100)
class Item(models.Model):
item = models.CharField(max_length=100)
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 WarehouseStockStatus(models.Model):
site_name = models.ForeignKey(Warehouse, on_delete=models.CASCADE)
item = models.ForeignKey(Item,on_delete=models.CASCADE,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)
@receiver(post_save,sender=InventoryOpenings)
def update_item(sender,instance,*args,**kwargs):
item = instance.item
item.stock_opening_quantity = instance.opening_quantity
item.current_inventory_level = item.current_inventory_level + instance.opening_quantity
item.save()