Django upgrade to 4.0 Abstract models cannot be instantiated
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!
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)