Как добавить расчет в Django модель? - PullRequest
0 голосов
/ 02 февраля 2020

Я просто хочу быть на сумму к заплаченной сумме, и результат будет опубликован в автомате баланса c

это мой admin.py

@admin.register (StudentPaymentSchedules)

class StudentPaymentSchedulesAdmin(admin.ModelAdmin):
    list_display = ('Fullname','Grade_Level','Payment_Schedule','Amount','Student_Payment_Date','Paid_Amount','Balance','Remarks',)
    ordering = ('pk','Students_Enrollment_Records__Education_Levels')
    search_fields = ('Students_Enrollment_Records__Student_Users__Firstname','Students_Enrollment_Records__Student_Users__Lastname',)
    list_filter = ('Students_Enrollment_Records__Education_Levels',)
    def Fullname(self, obj):
        return  obj.Students_Enrollment_Records.Student_Users
    def Grade_Level(self, obj):
        return  obj.Students_Enrollment_Records.Education_Levels
    actions = ["export_as_csv"]
    def export_as_csv(self, request, queryset):
        meta = self.model._meta
        field_names = [field.name for field in meta.fields]
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = 'attachment; filename={}.csv'.format(meta)
        writer = csv.writer(response)

        writer.writerow(field_names)
        for obj in queryset:
          row = writer.writerow([getattr(obj, field) for field in field_names])
        return response

У меня есть этот models.py

class StudentPaymentSchedules(models.Model):
    Students_Enrollment_Records=models.ForeignKey(StudentsEnrollmentRecord, related_name='+', on_delete=models.CASCADE,null=True,blank=True)
    Payment_Schedule =models.CharField(max_length=500,null=True,blank=True)
    Amount = models.FloatField(null=True,blank=True)
    Student_Payment_Date = models.DateField(null=True, blank=True)
    Paid_Amount = models.FloatField(null=True,blank=True)
    Balance = models.FloatField(null=True,blank=True)
    Remarks=models.TextField(max_length=500,null=True,blank=True)

, например, если Сумма равна 1950, а Оплаченная сумма равна 1500, если администратор нажмет кнопку Сохранить, то произойдет совместное вычисление.

enter image description here

Ответы [ 2 ]

0 голосов
/ 02 февраля 2020

Вы можете использовать Django Admin save_model , но я думаю, что вам не следует создавать отдельный столбец для результата деления. Вместо этого вы должны использовать @property функцию в вашем классе модели следующим образом:

class StudentPaymentSchedules(models.Model):
    Students_Enrollment_Records=models.ForeignKey(StudentsEnrollmentRecord, related_name='+', on_delete=models.CASCADE,null=True,blank=True)
    Payment_Schedule =models.CharField(max_length=500,null=True,blank=True)
    Amount = models.FloatField(null=True,blank=True)
    Student_Payment_Date = models.DateField(null=True, blank=True)
    Paid_Amount = models.FloatField(null=True,blank=True)
    Remarks=models.TextField(max_length=500,null=True,blank=True

    @property
    def balance(self):
        return self.Amount - self.Paid_Amount

И использовать SQL функцию деления, если вам нужно получить данные непосредственно из базы данных.

0 голосов
/ 02 февраля 2020

вы можете использовать сигналы предварительного сохранения, чтобы сделать это.

from django.db.models.signals import pre_save

def balance_reciever(sender, instance, *args, **kwargs):
    Amount = instance.Amount
    Paid_Amount = instance.Paid_Amount
    Balance = Amount-Paid_Amount
    instance.Balance = Balance

pre_save.connect(balance_reciever, sender=StudentPaymentSchedules)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...