Python 模型中的django循环导入

Python 模型中的django循环导入,python,django,importerror,Python,Django,Importerror,我知道这里有一个循环导入,但其中一个用于定义一些外键字段,另一个仅用于另一个模型中的属性 型号: 收据/型号.py from django.db import models from employees.models import Employee class Receipt(models.Model): Supervisor = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name='receipt_su

我知道这里有一个循环导入,但其中一个用于定义一些外键字段,另一个仅用于另一个模型中的属性

型号:

收据/型号.py

from django.db import models
from employees.models import Employee

class Receipt(models.Model):
    Supervisor = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name='receipt_supervisor')
    Employee = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name='receipt_employee')
    amount = models.DecimalField(max_digits=6, decimal_places=2)
from django.db import models
from receipts.models import Receipt

class Employee(models.Model):
    number = models.CharField(max_length=50, unique=True)
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)

    @property
    def receipt_sum(self):
        receipts = Receipt.objects.filter(Employee=self.pk)
        sum = 0
        for receipt in receipts:
            sum += receipt.amount
        return sum
employees/models.py

from django.db import models
from employees.models import Employee

class Receipt(models.Model):
    Supervisor = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name='receipt_supervisor')
    Employee = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name='receipt_employee')
    amount = models.DecimalField(max_digits=6, decimal_places=2)
from django.db import models
from receipts.models import Receipt

class Employee(models.Model):
    number = models.CharField(max_length=50, unique=True)
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)

    @property
    def receipt_sum(self):
        receipts = Receipt.objects.filter(Employee=self.pk)
        sum = 0
        for receipt in receipts:
            sum += receipt.amount
        return sum
我得到这个错误:

无法从部分初始化的模块“employees.models”导入名称“Employee”(很可能是由于循环导入)

是否有办法绕过此问题,以便在Employee属性中执行收据查询?或者我需要在其他地方进行计算

谢谢

是否有办法绕过此问题,以便我可以在
Employee
属性中执行收据查询

,您可以通过以下方法导入模块:

from django.db import models

class Employee(models.Model):
    number = models.CharField(max_length=50, unique=True)
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)

    @property
    def receipt_sum(self):
        from receipts.models import Receipt
        receipts = Receipt.objects.filter(Employee=self.pk)
        sum = 0
        for receipt in receipts:
            sum += receipt.amount
        return sum

尝试在employee.models.py的
def Receipt_sum(self)
中导入
Receipt
,类似于
def Receipt_sum(self):from receipts.models导入收据
…嗨,Daniel,您尝试过在此处搜索类似问题吗?看看这个答案,我相信它回答了你的问题:哦!好极了!导入到属性中是一种方法。我有一些额外的数学和过滤,我认为这会混淆问题,但给你额外的分数,先生!我刚刚意识到这个关系可以应用filter方法
receives=self.receipt\u employee.filter(is_deleted=False,created_at_uyear=datetime.now().year)
,这才是我真正想要的!再次感谢@WillemVanOnsem