如何在Django Admin中进行excel表格式计算?

2024-10-03 21:35:26 发布

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

我有一个低于标准的学生。在Django Admin中,我可以编写一个代码,这样当用户键入“ActualFees”值时 它应该检查“余额费用”是否为空。如果它是空的,那么Paidfees应该在BalanceFees中复制,否则不要复制。你知道吗

同样,如果“PaidFees”是由用户输入的,那么“BalanceFees”必须计算为

BalanceFees = BalanceFees - PaidFees.

如何在Django Admin中编写代码来实现这一点?你知道吗

class Student(models.Model):
    GENDER = (
        ('M', 'Male'),
        ('F', 'Female'),)
    BLOOD = (
        ('O+','O+'),
        ('O-','O-'),
        ('A +','A +'),
        ('A -','A -'),
        ('B +','B +'),
        ('B -','B -'),
        ('AB +','AB +'),
        ('AB -','AB -'),
        )
    enroll_no = models.IntegerField()
    Name = models.CharField(max_length=200,help_text='SurName MiddleName     First name ')
    gender = models.CharField(max_length=1,blank = True,choices=GENDER)
    blood_gr = models.CharField(max_length=3,blank = True,choices=BLOOD)
    category = models.CharField(max_length=200,blank = True)
    photo = models.ImageField(upload_to="static",blank = True)
    ActualFees = models.IntegerField(blank = True)
    PaidFees = models.IntegerField(blank = True, null = True)
    BalanceFees = models.IntegerField(blank = True, null = True)
    PermenantAddress = models.TextField(blank = True)
    Parents_Mobile = models.IntegerField(blank = True,default=0)
    Personal_Mobile = models.IntegerField(blank = True,default=0)
    LocalAddress = models.TextField(blank = True)
    Parents_email = models.CharField(max_length=200,blank = True,default='')
    Personal_email = models.CharField(max_length=200,blank = True,default='')

   def __str__(self):
        return self.Name

Tags: django代码用户truedefaultabadminmodels
2条回答

有两种方法:

  1. 服务器端:捕获AdminForm的保存,然后如果一个字段为空,则计算相应的其他值,并进行验证以确保所有三个字段的总和都是正确的值。这种方法的问题是,如果客户机使用javascript,他们仍然可以输入无效数据
  2. 客户端:编写一些定制javascript来捕获对相应字段的更改,然后在onblur事件上相应地求和。你知道吗

两者的结合可能是最好的,实际的实现留给读者作为练习。你知道吗

要在中添加额外脚本,只需修改Media类即可:

class MyModelAdmin(ModelAdmin):
    class Media:
        js = [
                '/scripts/calculate.js',
            ]

我就是这样做的。我编辑过型号.py并在学生模型PaidFees中添加了default=0 平衡费。添加这些字段后,我将执行迁移和所有操作。我以前的数据也保持原样。 我可以用save\ u model方法进行计算管理员.py你知道吗

class Student(models.Model):
    ....
    ....
    ....

    PaidFees = models.IntegerField(blank = True, default = 0)
    BalanceFees = models.IntegerField(blank = True, default = 0)
    ....
    ....

def save_model(self, request, obj, form, change):
    if obj.BalanceFees == 0:
        obj.BalanceFees = obj.ActualFees
    else:
        obj.BalanceFees = obj.BalanceFees-obj.PaidFees
    obj.save()

我仍然很想知道客户端的解决方案。你知道吗

相关问题 更多 >