2017-06-12 52 views
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() 

回答

1

如果你不希望這個問題出現,只需導入您的def save函數內部PurchaseOrderDetails。

def save(self, *args, **kwargs): from purchase_order.models import PurchaseOrderDetail ...

+0

我其實在閱讀本文之前就已經試過了。謝謝 – user2168066

+0

另一種選擇是使用模型信號('post_save()'將是一個明顯的候選)來將InventoryTransaction從PurchaseOrderDetail中解耦。 –