无法将模型导入其他模型Django

时间:2019-02-14 10:40:06

标签: python django django-models

我有一个来自采购模块的供应商模型,我只是将其导入到我的库存模块中。

  

这是我的采购模块模型供应商

from django.db import models
from django_countries.fields import CountryField

from Inventory.models import productDetails,products
from Accounts.models import elementaryhead
from datetime import datetime
import base64

# Create your models here.
class suppliers(models.Model):
    companyName=models.CharField(max_length=30,verbose_name='Company Name')
    companyAddress=models.CharField(max_length=50,verbose_name='Company Address')
    city=models.CharField(max_length=20,verbose_name='City')
    region=models.CharField(max_length=20,verbose_name='Region')
    country=CountryField()
    postalCode=models.IntegerField(verbose_name='Postal Code')
    companyPhone=models.IntegerField(verbose_name="Company Phone")
    companyFax=models.IntegerField(verbose_name='Company Fax')
    elementaryID=models.ForeignKey(elementaryhead,on_delete=models.CASCADE,default=None,null=True,verbose_name='Elementary head',editable=False)
    buyer=models.BooleanField(default=None,verbose_name='Is Buyer',editable=False)
    supplier=models.BooleanField(default=None,verbose_name='Is Supplier',editable=False)
    website=models.URLField(default=None,verbose_name='Website')

    def save(self, force_insert=False, force_update=False, using=None,
             update_fields=None):
        accountID = elementaryhead.objects.order_by('id').last().id + 1
        code = '00003-000010-0000' + str(accountID)
        subhead=10
        elementaryhead.objects.create(subhead_id=subhead, name=self.companyName,fixed=False, codes=code, right=True)
        accountID = elementaryhead.objects.order_by('id').last().id + 1
        subhead=11
        code = '00003-000011-0000' + str(accountID)
        elementaryhead.objects.create(subhead_id=subhead, name=self.companyName+'(I/TAX PAYABLE)',fixed=False, codes=code, right=True)
        accountID = elementaryhead.objects.order_by('id').last().id + 1
        subhead=15
        code = '00003-000015-0000' + str(accountID)
        elementaryhead.objects.create(subhead_id=subhead, name=self.companyName+'(GST W/HELD PAYABLE)',fixed=False, codes=code, right=True)
        self.supplier = True
        self.buyer = False
        super(suppliers,self).save()

    def __str__(self):
        return self.companyName
  

这是我的库存模块模型InventoryIn

from django.db import models
from datetime import datetime
from Purchase.models import suppliers,contracts
class inventoryIn(models.Model):

    supplierID=models.ForeignKey(suppliers,on_delete=models.CASCADE,verbose_name='Supplier')
    productID=models.ForeignKey(products,on_delete=models.CASCADE)
    purchaseContractID=models.ForeignKey(contracts,on_delete=models.CASCADE)
    unitsIn=models.IntegerField(verbose_name='Units In')
    doID=models.IntegerField(verbose_name='Do ID')
    doImage=models.ImageField(upload_to='/assets/image')
    invoiceID=models.IntegerField(verbose_name='Invoice ID')
    invoiceImage=models.ImageField(upload_to='/assets/image')
    agingDate=models.DateField()
    dateOfEntry=models.DateField(default=datetime.now())
    def __str__(self):
        return self.supplierID

我基本上是添加了两个与Purchase模块相关的ForeignKey(supplierID,purchaseContractID)。但是它抛出了一个错误

  

ImportError:无法导入名称“供应商”   我曾尝试将其导入InventoryIn模型类中。但是它对我没有用。

4 个答案:

答案 0 :(得分:1)

这是用于循环导入。但是您可以通过

class inventoryIn(models.Model):

    supplierID=models.ForeignKey('Purchase.suppliers',on_delete=models.CASCADE,verbose_name='Supplier')
    productID=models.ForeignKey(products,on_delete=models.CASCADE)
    purchaseContractID=models.ForeignKey('Purchase.contracts',on_delete=models.CASCADE)
    unitsIn=models.IntegerField(verbose_name='Units In')
    doID=models.IntegerField(verbose_name='Do ID')
    doImage=models.ImageField(upload_to='/assets/image')
    invoiceID=models.IntegerField(verbose_name='Invoice ID')
    invoiceImage=models.ImageField(upload_to='/assets/image')
    agingDate=models.DateField()
    dateOfEntry=models.DateField(default=datetime.now())
    def __str__(self):
        return self.supplierID

也不要忘记删除此导入

from Purchase.models import suppliers,contracts

答案 1 :(得分:0)

您有一个循环进口。您的一个Python文件从另一个导入,然后反之亦然。这就导致了这种问题-在A仍处于设置状态时B试图从A导入。

最简单的解决方案是将它们全部放入一个文件中,另一种有问题的解决方案是仅在save函数中导入另一个模块(因此稍后再进行)。

更好的解决方案是仔细查看您的数据模型,以了解为什么存在这种循环性以及这是否真的必要,因为这通常是不良设计的标志。

答案 2 :(得分:0)

您有一个循环进口。但是您似乎根本没有理由将库存模型导入到供应商中,因为您没有在该文件中使用它们。删除导入。

答案 3 :(得分:0)

您可以尝试以下方法吗?

https://<your_subdomain>.onelogin.com/session_via_api_token

代替导入模型