1

I'm upgrading my Django App from 2.2 to 4.0.6. I made different code upgrades and have the APP mostly working.

But I get the following error "Abstract models cannot be instantiated" and can't find clues on how to solve this (without downgrading Django versiion as in this post

Models

class AbstractMes(models.Model):
    mes = models.DateField(blank=False, null=True)
    operaciones = models.IntegerField(blank=True, null=True)
    facturacion = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
    unidades = models.IntegerField(blank=True, null=True)
    diferencia = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
    diferencia_porc = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
    diferencia_media_movil = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)

    class Meta:
        abstract = True

    def __str__(self):
        return str(self.mes)


class Meses(models.Model):
    mes = models.DateField(blank=False, null=True)
    operaciones = models.IntegerField(blank=True, null=True)
    facturacion = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
    facturacion_dolar = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
    unidades = models.IntegerField(blank=True, null=True)

    def __str__(self):
        return str(self.mes)

In views

meses = Meses.objects.all()
abstract_meses = AbstractMes(meses)

Any clues welcome. Thanks!

Francisco Ghelfi
  • 872
  • 1
  • 11
  • 34

1 Answers1

0

As I know you can not create any instances from Abstract models, you can just create instances from concrete models, It would be better if you provided the older version of the code

Also in abstraction, it is better to inherit the concrete model from the abstract model, like:

class AbstractMes(models.Model):
    mes = models.DateField(blank=False, null=True)
    operaciones = models.IntegerField(blank=True, null=True)
    facturacion = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
    unidades = models.IntegerField(blank=True, null=True)
    diferencia = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
    diferencia_porc = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
    diferencia_media_movil = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)

    class Meta:
        abstract = True

    def __str__(self):
        return str(self.mes)

class Meses(AbstractMes):
    facturacion_dolar = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
Ali Davood
  • 101
  • 5