0
我在兩個不同的模型中有一個應用,錯誤是'無法導入名稱SKU',我相信這是因爲循環導入。我如何仍然可以引用這個app.model,而無需像我目前那樣引用模型導入。圓形導入應用模型
型號PurchaseOrderDetail 應用PURCHASE_ORDER
from product.models import InventoryTransaction
class PurchaseOrderDetail(AuditMixin, models.Model):
purchase_order = models.ForeignKey(PurchaseOrder,
on_delete=models.PROTECT)
sku = models.ForeignKey(Sku, on_delete=models.PROTECT)
qty_received = models.IntegerField(default=0, null=True, blank=True)
reason_code = models.IntegerField(default=0, null=True, blank=True)
def _get_sku_code(self):
return self.sku.sku_code
def _set_sku_code(self, value):
tenant = self.purchase_order.tenant
sku = Sku.objects.get(tenant=tenant, sku_code=value)
self.sku = sku
sku_code = property(_get_sku_code, _set_sku_code)
def calc_received(self):
# calculate sum of qty_received from inventory_transactions
sum_quantity = InventoryTransaction.objects.filter(
sku=self.sku,
po_number=self.purchase_order,
transaction_type='100'
).aggregate(
quantity_sum=Sum(F('quantity'))
)
return sum_quantity
型號Inventorytransaction 應用產品
from purchase_order.models import PurchaseOrderDetail
class InventoryTransaction(models.Model):
tenant = models.ForeignKey(Tenant)
po_number = models.CharField(max_length=100)
inventory_transaction = models.ForeignKey(PurchaseOrderInventoryTransaction)
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
# update the PO detail with the qty_received
obj = PurchaseOrderDetail.objects.get(
purchase_order=self.po_number,
sku=self.inventory_transaction.sku
)
obj.qty_received = obj.calc_received()
obj.save()
我其實在閱讀本文之前就已經試過了。謝謝 – user2168066
另一種選擇是使用模型信號('post_save()'將是一個明顯的候選)來將InventoryTransaction從PurchaseOrderDetail中解耦。 –