Last active
September 19, 2020 17:26
-
-
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?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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