IntegrityError CHECK constraint failed on Django

вот моя ошибка:

IntegrityError at /caja_chica/comprobantes/9/editar/

CHECK constraint failed: caja_chica_cajachica

Request Method:     POST
Request URL:    http://127.0.0.1:8000/caja_chica/comprobantes/9/editar/
Django Version:     3.2.5
Exception Type:     IntegrityError
Exception Value:    

CHECK constraint failed: caja_chica_cajachica

Проблема возникает на моей модели, когда я пытаюсь сохранить объект Comprobante перед выполнением операции. Вот моя модель Comprobante:

class Comprobante(models.Model):
    TIPO_A = 1
    TIPO_B = 2
    TIPO_C = 3
    TIPO_T = 4
    TIPO_X = 5

    TIPO_CHOICES = (
        (TIPO_A, 'A'),
        (TIPO_B, 'B'),
        (TIPO_C, 'C'),
        (TIPO_T, 'T'),
        (TIPO_X, 'X'),
    )

    caja_chica = models.ForeignKey(CajaChica, on_delete=models.PROTECT)
    lote = models.ForeignKey(Lote, on_delete=models.DO_NOTHING, null=True, blank=True, related_name='lote_comprobantes')
    numero = models.CharField(max_length=13)
    tipo = models.PositiveSmallIntegerField(choices=TIPO_CHOICES, default=TIPO_T)
    ente = models.ForeignKey(Ente, on_delete=models.PROTECT)
    fecha = models.DateField()
    partida_presupuestaria = models.ForeignKey(PartidaPresupuestaria, on_delete=models.PROTECT)
    detalle = models.CharField(max_length=100)
    importe = models.DecimalField(max_digits=7, decimal_places=2)
    history = HistoricalRecords()

    def __str__(self):
        return self.numero

    def save(self, *args, **kwargs):
        super(Comprobante, self).save(*args, **kwargs)
        self.caja_chica.disponible -= self.importe
        self.caja_chica.save()

    def get_absolute_url(self):
        """
        Devuelve la url para acceder a una instancia particular de Comprobante.
        """
        return reverse('caja_chica:comprobante_update', args=[str(self.id)])

вот функция, которая сломала мою модель:

    def save(self, *args, **kwargs):
        super(Comprobante, self).save(*args, **kwargs)
        self.caja_chica.disponible -= self.importe
        self.caja_chica.save()

а это моя модель CajaChica:

class CajaChica(models.Model):
    FUENTE_11 = 11
    FUENTE_12 = 12
    FUENTE_13 = 13

    FUENTE_CHOICES = (
        (FUENTE_11, FUENTE_11),
        (FUENTE_12, FUENTE_12),
        (FUENTE_13, FUENTE_13),
    )

    numero = models.PositiveSmallIntegerField()
    nombre = models.CharField(max_length=100, unique=True)
    limite = models.PositiveIntegerField(help_text='Cantidad de dinero máxima asignada para gastos')
    disponible = models.PositiveIntegerField(help_text='Dinero disponible para gastos')
    fuente = models.PositiveSmallIntegerField(choices=FUENTE_CHOICES, default=FUENTE_11)
    actividad = models.ForeignKey(Actividad, on_delete=models.DO_NOTHING)
    ubicacion = models.ForeignKey(UbicacionGeografica, on_delete=models.PROTECT)
    responsable = models.OneToOneField(Responsable, on_delete=models.PROTECT, related_name='caja_chica')
    subresponsable = models.OneToOneField(Responsable, on_delete=models.DO_NOTHING, null=True, blank=True)
    history = HistoricalRecords()

    class Meta:
        verbose_name_plural = 'Cajas Chicas'

    def __str__(self):
        return self.nombre


при попытке сохранить объект Comprobante выдает ошибку

IntegrityError at /caja_chica/comprobantes/9/editar/

CHECK constraint failed: caja_chica_cajachica

Request Method:     POST
Request URL:    http://127.0.0.1:8000/caja_chica/comprobantes/9/editar/
Django Version:     3.2.5
Exception Type:     IntegrityError
Exception Value:    

CHECK constraint failed: caja_chica_cajachica

Я доказал, что нужно закомментировать эту функцию, чтобы узнать, нарушает она мой код или нет, и когда я это сделал, приложение заработало отлично, но мне нужно, чтобы она выполняла эту операцию с объектом caja_chica. Я не знаю, как решить эту проблему, я не понимаю, где я должен работать над ней.

Вернуться на верх