首页 > 解决方案 > django 如何在views.py中使用减法

问题描述

我只想将总 SchoolFeesMasterList(Amount) 减去 StudentsEnrollmentRecord ESC(Amount)

这是我在views.py 中的代码

studentenroll = StudentsEnrollmentRecord.objects.filter(Student_Users=1)
total_paid = list(SchoolFeesMasterList.objects.aggregate(Sum('Amount')).values()) or 0
discount = studentenroll.ESC.amount - total_paid

这是我的models.py

class SchoolFeesMasterList(models.Model):
    Education_Levels= models.ForeignKey(EducationLevel, related_name='+', on_delete=models.CASCADE,blank=True)
    Courses = models.ForeignKey(Course, related_name='+', on_delete=models.CASCADE,blank=True)
    Payment_Types = models.ForeignKey(PaymentType, related_name='+', on_delete=models.CASCADE,blank=True)
    Display_Sequence = models.IntegerField(blank=True, null=True)
    School_Fees_Type= models.ForeignKey(SchoolFeesType, related_name='+', on_delete=models.CASCADE,blank=True)
    Amount =  models.FloatField()
    Amount_Per_Unit = models.FloatField()
    Effectivity_Date_From = models.DateField(null=True,blank=True)
    Effectivity_Date_To = models.DateField(null=True,blank=True)
    Remark = models.TextField(max_length=500,blank=True)

class esc(models.Model):
    Education_Levels = models.ForeignKey(EducationLevel, related_name='+', on_delete=models.CASCADE,blank=True,null=True)
    Description = models.CharField(max_length=500, null=True,blank=True)
    amount = models.FloatField()

    class Meta:
        verbose_name_plural = "Grade Level With/without ESC"
class StudentsEnrollmentRecord(models.Model):
    Student_Users = models.ForeignKey(StudentProfile, on_delete=models.CASCADE,null=True)
    School_Year = models.ForeignKey(SchoolYear, related_name='+', on_delete=models.CASCADE, null=True, blank=True)
    Courses = models.ForeignKey(Course, related_name='+', on_delete=models.CASCADE, null=True, blank=True)
    strands = models.ForeignKey(strand, related_name='+', on_delete=models.CASCADE, null=True, blank=True)
    Section = models.ForeignKey(Section, related_name='+', on_delete=models.CASCADE, null=True,blank=True)
    Payment_Type = models.ForeignKey(PaymentType, related_name='+', on_delete=models.CASCADE, null=True)
    Discount_Type = models.ForeignKey(Discount, related_name='+', on_delete=models.CASCADE, null=True,blank=True)
    Education_Levels = models.ForeignKey(EducationLevel, related_name='+', on_delete=models.CASCADE,blank=True,null=True)
    ESC = models.ForeignKey(esc, on_delete=models.CASCADE,null=True,blank=True)
    Remarks = models.TextField(max_length=500,null=True,blank=True)

这是错误

在此处输入图像描述

标签: djangodjango-views

解决方案


您需要将其更改为:

studentenroll = StudentsEnrollmentRecord.objects.filter(Student_Users=1).last()
total_paid = SchoolFeesMasterList.objects.aggregate(Sum('Amount'))['Amount__sum'] or 0
discount = studentenroll.ESC.amount - total_paid

studentenroll不指定元素是 QuerySet,而不是单个对象。您不能通过 QuerySet 访问字段,但您可以使用单个记录来访问。


推荐阅读