表级逻辑Django

时间:2018-04-11 15:52:22

标签: python django django-models

我有这个型号:

class Sesion(models.Model):
    maq = models.CharField(max_length=25)
    ini_sesion = models.DateTimeField(auto_now_add=True)
    fin_sesion = models.DateTimeField(null=True, blank=True)
    cont_ini_a = models.IntegerField(null=True, blank=True)
    con_ini_b = models.IntegerField(null=True, blank=True)
    con_fin_a = models.IntegerField(null=True, blank=True)
    con_fin_b = models.IntegerField(null=True, blank=True)

   @staticmethod
   def cierre():
    instance = Sesion.objects.filter(fin_sesion__isnull=True).latest('ini_sesion')
    sesion_abierta = None
    try:
        sesion_abierta = Sesion.objects.filter(maq=instance.maq).filter(fin_sesion__isnull=True) \
                .filter(ini_sesion__lt=instance.ini_sesion).latest('ini_sesion')
    except Exception:
        print('Ha ocurrido una excepcion!')
    if sesion_abierta:
        sesion_abierta.con_fin_a = instance.con_fin_a
        sesion_abierta.con_fin_b = instance.con_fin_b
        sesion_abierta.fin_sesion = instance.ini_sesion
    return sesion_abierta.save()

现在问题是,每次保存模型实例时,我都无法使其工作。从python / django shell调用时我工作 >>> Sesion.cierre() 但是在保存模型实例并且它不能处理save()覆盖或信号时也不会。 Thx提前。

1 个答案:

答案 0 :(得分:0)

我会回答这个问题。这是有用的:

@receiver(post_save, sender=Sesion)
def cierre(*args, **kwargs):
instance = Sesion.objects.filter(fin_sesion__isnull=True).latest('ini_sesion')
sesion_abierta = None
try:
    sesion_abierta = Sesion.objects.filter(maq=instance.maq).filter(fin_sesion__isnull=True) \
            .filter(ini_sesion__lt=instance.ini_sesion).latest('ini_sesion')
except Exception:
    print('Ha ocurrido una excepcion!')
if sesion_abierta:
    sesion_abierta.con_fin_a = instance.con_fin_a
    sesion_abierta.con_fin_b = instance.con_fin_b
    sesion_abierta.fin_sesion = instance.ini_sesion
    sesión_abierta.save()

编辑:请注意,“信号”代码与缩进的行相同 class Sesion(models.Model):