表层逻辑Djang

2024-09-26 18:01:47 发布

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

我有这个模型:

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()覆盖或信号也不起作用时,情况就不一样了。提前打电话


Tags: instance模型truemodelsfilterconnullini
1条回答
网友
1楼 · 发布于 2024-09-26 18:01:47

好吧,我来回答这个问题。以下是有效的方法:

@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()

编辑:注意“signals”代码与 分类(models.Model):

相关问题 更多 >

    热门问题