Валидаторы Django Аргумент TypeError int () должен быть строкой, байтовоподобным объектом или числом, а не 'DeferredAttribute - PullRequest
0 голосов
/ 16 октября 2019

У меня есть такая ситуация: когда поле modelf заполнено, оно не должно быть больше поля другой модели. Я написал этот валидатор.

class Insumo(models.Model):
    nombre = models.CharField(max_length=100)
    cantidadexistencias = models.DecimalField(max_digits=50, decimal_places=3, validators=[MinValueValidator(0)])

    def __str__(self):
        return self.nombre + " "+str(self.cantidadexistencias)



class InsumoProduction(models.Model):
    idproduction = models.ForeignKey('Production', on_delete=models.CASCADE)
    idinsumo = models.ForeignKey('Insumo', on_delete=models.CASCADE)
    #Validar que la cantidad usada sea maximo el numero de existencias
    cantidadusada = models.DecimalField(max_digits=50, decimal_places=3,validators=[insumo_existencias])



    def save(self,*args,**kwargs):
        insumo = Insumo.objects.get(id = self.idinsumo_id)
        insumo.cantidadexistencias -= self.cantidadusada
        insumo.save()
        super(InsumoProduction,self).save(*args,**kwargs)




    class Meta:
        constraints = [
            models.UniqueConstraint(fields=["idproduction", "idinsumo"],
                                    name='unique_insumoproduction')
        ]


    def __str__(self):
        return self.idproduction.idfinalproduct.idproduct.nombre +" "+ self.idproduction.idfinalproduct.idtaste.nombre  \
               + " "+ self.idinsumo.nombre + " "+ str(self.cantidadusada) + " Fecha Produccion " + str(
            self.idproduction.fechaproduccion)

Это мои модели, и мой валидатор здесь:

from django.core.exceptions import ValidationError
from ubindustries.ubapi.models import models
from django.utils.translation import gettext_lazy as _


def insumo_existencias(value):
    insumo = models.Insumo.objects.get(id=models.InsumoProduction.idinsumo_id)

    if (insumo.cantidadexistencias < value):
        raise ValidationError(
            _('Error no hay existencias suficientes'),
        )

Я получил это сообщение об ошибке: TypeError at / ubapi / insumoproduction / add / int() аргумент должен быть строкой, байтовоподобным объектом или числом, а не 'DeferredAttribute

...