无法将模型导入其他模型

2024-10-01 07:51:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个采购模块的供应商模型,我只是把它导入我的库存模块。你知道吗

Here is my Purchase Module Model Supplier

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

Here is my Inventory Module Model 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

我基本上是添加了两个ForeignKey(supplierID,purchasecontracid),这与购买有关模块。但是它抛出了一个错误

ImportError: cannot import name 'suppliers' And i had tried to import it within the InventoryIn Model Class. But its didn't worked for me.


Tags: namefromimportselfnoneidfalseverbose
3条回答

这是循环导入。但你可以通过以下方式来忽略这个问题

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

你有一个循环导入。一个Python文件从另一个文件导入,反之亦然。这就导致了这种问题——B试图在A仍在设置时从中导入。你知道吗

最简单的解决方案是将它们全部放在一个文件中,另一个黑客解决方案是只在save函数中导入另一个模块(以后会发生这种情况)。你知道吗

更好的解决方案是仔细检查数据模型,看看为什么会有这种循环,以及这是否真的有必要,因为这通常是一个糟糕设计的标志。你知道吗

你有一个循环导入。但似乎没有任何理由将库存模型导入供应商,因为您没有在该文件中使用它们。删除导入。你知道吗

相关问题 更多 >