覆盖save()方法不会更新记录

时间:2018-06-18 17:46:39

标签: django django-models

关于我添加了一个打算自动更新的新字段的模型,但它不起作用。

这是所涉模型的一部分:

class ExpedienteDPI():
        folio = models.CharField(max_length=13)
        fecha_tramite = models.DateField(null=True, blank=True)
        fecha_notificacion_aclaracion = models.DateField(
            'TRÁMITE: Notificación',
            help_text='Fecha de notificación de aclaración al ciudadano AC',
            null=True, blank=True
        )
        # muchos campos mas
        # Siguen solo campos calculados
        delta_notificar = models.SmallIntegerField(
            help_text="Delta entre tramite y notificación",
            editable=False, null=True
        )
        completo = models.PositiveSmallIntegerField(editable=False, null=False, default=0)

此模型会覆盖模型的save()方法以进行一些计算,以填充不可编辑的字段,包括completo

        def save(self, force_insert=False, force_update=False):
            self.delta_notificar = delta(self.fecha_tramite, self.fecha_notificacion_aclaracion)
            # Muchos campos calculados
            if self.entidad == 29 and \
                    self.fecha_tramite and \
                    self.fecha_entrevista and \
                    self.fecha_envio_expediente and \
                    self.fecha_notificacion_aclaracion:
                self.completo = 1
            else:
                self.completo = 0
            super(ExpedienteDPI, self).save(force_insert=False, force_update=False)

在此示例中,save ()方法按预期计算delta_notifcar字段,计算两个日期之间的差异,但不适用于completo field。

我在Django的shell中测试了completo的条件,其中包含:

for x in ExpedienteDPI.objects.all():
    if x.entidad == 29 and \
        x.fecha_tramite and \
        x.fecha_entrevista and \
        x.fecha_envio_expediente and \
        x.fecha_notificacion_aclaracion:
        if x.completo == 0:
            print(f'Completo vale {x.completo}. Cambiando {x.folio} a "Completo"')
            x.completo = 1
        else:
            print(f"{x.folio} - Completo")
    else:
        print(f"{x.folio} - Incompleto")
        x.completo = 0
    x.save(force_update=True)

它有效,显示预期的输出:

1729032100849 - Incompleto
Completo vale 0. Cambiando 1729012101027 a "Completo"
1729022401044 - Incompleto
1729032100652 - Incompleto
Completo vale 0. Cambiando 1729022200132 a "Completo"
1729032100109 - Incompleto

我认为问题不在于我的PostgreSQL数据库,因为当我用UPDATE更新时,注册表确实更新了:

UPDATE dpi_expedientedpi
SET completo = 1
WHERE folio = '1729025301604'
SELECT folio, completo FROM dpi_expedientedpi WHERE folio = '1729025301604';

为什么记录没有更新?

0 个答案:

没有答案