Skip to content

Instantly share code, notes, and snippets.

@eversoncoutinho
Last active September 19, 2020 17:26
Show Gist options
  • Save eversoncoutinho/b0edce1327f65ea190fce95e07764523 to your computer and use it in GitHub Desktop.
Save eversoncoutinho/b0edce1327f65ea190fce95e07764523 to your computer and use it in GitHub Desktop.
Como colocar um validador para sempre o valor adicionado para cada maquina seja maior que o ultimo valor cadastrado no bd?
from django.db import models
from datetime import datetime
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
from django.utils.translation import ugettext_lazy as _
# Problema: Como montar um validators onde o valor de entrada da máquina x deva ser sempre maior que o último valor de entrada cadastrado no bd da respectiva maquina?
#
Ex.: A maquina M1 recebeu o valor 70 e a maquina M2 recebeu 100
# na próxima leitura M1 recebrá 80.
# Como considerar a machine selecionada no model antes de aplicar o validators?
def ValidationEnterValue(value):
last_value = Leitura.objects.latest('readed_at').enter_value
if value < last_value:
raise ValidationError(_('%(value)s erro'),
params={'value': value},
)
# Cadastro das máquinas
class Maquina(models.Model):
machine_name = models.CharField("Nome da máquina",
max_length=50,
blank= False,
null=False,
primary_key=True)
machine_type = models.CharField('Tipo',
max_length=20,choices=[('Cédula','Cédula'),
('moeda','Moeda')],
default='Cédula', blank= False)
machine_installed_at = models.DateField(("Data da instalação"), auto_now=False, auto_now_add=False,
default = datetime.now)
init_entry_value = models.PositiveIntegerField(("Valor inicial de entrada"), default = 0, blank = False)
init_exit_value = models.PositiveIntegerField(("Valor inicial de saída"), default = 0, blank = False)
class Meta:
verbose_name = "Máquina"
verbose_name_plural = "Máquinas"
def __str__(self):
return str(self.machine_name)
# Leituras dos valores de entrada
class Leitura(models.Model):
machine = models.ForeignKey(Maquina,
verbose_name = 'Máquina',
on_delete=models.CASCADE,
primary_key=False)
readed_at = models.DateTimeField(("Data da leitura"), default=datetime.now, auto_now=False, auto_now_add=False)
enter_value = models.PositiveIntegerField("Valor de entrada",
validators=[ValidationEnterValue])# precisa ser maior que o último valor cadastrado no bd
# para a mesma maquina
exit_value = models.PositiveIntegerField(("Valor de saída"))
#data da prestação de contas
def __str__(self):
return str(self.machine)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment