如何在Django中触发选择事件?

问题描述 投票:1回答:1

每当SAIDA_CHOICES为“Sim”时,它都不会执行任何操作,但是当它为“Não”时,它会给出“是”并将其存储在数据库Checkout with datatimenow中。

但是,当我执行下面的代码在Sim或Não时,它总是存储结帐:

SAIDA_CHOICES = (
    ('Não', 'Não Pago'),
    ('Sim', 'Pago')
    )

class MovRotativo(models.Model):
    checkin = models.DateTimeField(auto_now=True, blank=False, null=False,)
    checkout = models.DateTimeField(auto_now=True, null=True, blank=True)
    email = models.EmailField(blank=False)
    placa = models.CharField(max_length=7, blank=False)
    modelo = models.CharField(max_length=15, blank=False)
    valor_hora = models.DecimalField(
         max_digits=5, decimal_places=2, null=False, blank=False)
    pago = models.CharField(max_length=15, choices=PAGO_CHOICES)
    chk = models.CharField(max_length=15, choices=SAIDA_CHOICES)

     def saida(self):
        if self.chk == 'sim':
            return self.chk
        else:
            self.checkout = models.DateTimeField(auto_now=True)
            return self.checkout
python django
1个回答
1
投票

我认为你可以覆盖模型的save方法,这样如果值不是Nao,那么它会将checkout值存储到当前时间:

from django.utils import timezone

class MovRotativo(models.Model):
    ...
    checkout = models.DateTimeField(default=None, null=True, blank=True)  # change it to default None
    ... # rest of the fields

    def save(self, *args, **kwargs):
        if not self.chk == 'Sim':
            self.checkout = timezone.now()
        else:
            self.checkout = None
        return super(MovRotativo, self).save(*args, **kwargs)
© www.soinside.com 2019 - 2024. All rights reserved.