django Как использовать вычитание в views.py - PullRequest
0 голосов
/ 26 января 2020

Я просто хочу вычесть весь SchoolFeesMasterList (Amount) в StudentsEnrollmentRecord ES C (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

это мои модели .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)

это ошибка

enter image description here

1 Ответ

0 голосов
/ 26 января 2020

Вам нужно изменить это на:

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, но вы можете сделать это с одной записью.

...