我有这个型号:
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提前。
答案 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):