Django-覆盖保存方法以发送数据

时间:2018-09-05 08:07:53

标签: python django

我正在使用人工管理系统,其中用户申请请假,并且只有在status == '0'

时,相关数据才应进入历史记录表

我已经尝试过使用信号,但是每次管理员保存时,它都会被注册到表中。我读过,最好重写save()而不是使用信号

STATUS_CHOICES = (('0', 'Rejected'),('1', 'Accepted'),)

class Employee(models.Model):

    employee_ID = models.CharField(max_length = 20)
    name = models.CharField(max_length = 50)
    user = models.ForeignKey(User, on_delete = models.CASCADE, null =True)
    status = models.CharField(max_length = 15, choices = STATUS_CHOICES)


    def save(self, *args, **kwargs):

        if Leave.status == '1':
            history = History()
            history.employee_ID = self.employee_ID
            history.name = self.name
            history.save()
            print('data sent')

class History(models.Model):

    name = models.CharField(max_length = 50)
    employee_ID = models.CharField(max_length = 20)

在覆盖save方法时我一直在犯什么错误?

1 个答案:

答案 0 :(得分:1)

您错过了重要的部分super(Employee, self).save()

def save(self, *args, **kwargs):
    super(Employee, self).save()
    if self.status == '0':
        history = History.objects.create(
            employee_ID = self.employee_ID,
            name = self.name,
        )
        print('data sent')

现在您将保存模型,如果状态为0(代码中为1),则将创建一个历史记录模型条目(也许添加日期时间)

相关问题