Django maakt eigenlijk geen tabel voor abstracte modellen. Een abstracte basisclass is een basisklasse waar Django geen database-tabel voor maakt. In plaats daarvan worden de velden van de abstracte klasse toegevoegd aan elk van de kinderklassen, met hun eigen database-tabellen.
Volgens de officiële Django-documentatie stelt een abstracte basisclass je in staat om te definiëren wat volgens Django als een gemeenschappelijk gegevensstuk moet worden beschouwd en deze velden worden vervolgens automatisch in onze modellen gekopieerd. Elk model dat die modelklasse erft, zal die velden automatisch krijgen. Daarvoor maakt Django geen extra tabel.
Bijvoorbeeld, als je meerdere modellen hebt die gelijke velden delen, dan kan je een abstracte basisclass gebruiken om deze gedeelde velden te definiëren. Hierdoor wordt de herhaalde code die betrekking heeft op deze gedeelde velden verminderd.
```
class AbstractBase(models.Model):
naam = models.CharField(max_length=100)
creatie_datum = models.DateTimeField()
class ChildA(AbstractBase): extra_field_a = models.CharField(max_length=50)
class ChildB(AbstractBase):
extra_field_b = models.CharField(max_length=50)
```
In dit voorbeeld zal Django geen tabel in de database creëren voor `AbstractBase`. In plaats daarvan zal het een tabel creëren voor zowel `ChildA` als `ChildB`, en beide tabellen zullen de velden `naam` en `creatie_datum` bevatten, evenals hun specifieke extra velden.
Dit is een krachtig concept waarmee ontwikkelaars droge(Don’t Repeat Yourself)-code kunnen schrijven door herbruikbare modelvelden in een abstracte basisclass te plaatsen en deze vervolgens in alle relevante kindmodellen op te nemen.
De bron die gebruikt werd om het antwoord te construeren is de officiële Django-documentatie, die gevonden kan worden op de volgende link: https://docs.djangoproject.com/en/3.1/topics/db/models/#abstract-base-classes.