Het creëren van relaties tussen modellen in Django kan worden gedaan met behulp van verschillende soorten velden, zoals ForeignKey, ManyToManyField en OneToOneField.
Django vereenvoudigt de taken met betrekking tot databasemanagement door een abstractielaag te bieden in de vorm van modellen. Je kunt complexe databaseschema’s maken en modificaties aanbrengen zonder rechtstreeks SQL-code te moeten schrijven.
Laten we, voor de doeleinden van dit voorbeeld, veronderstellen dat we een blog bouwen. In onze blog hebben we gebruikers (User model), berichten (Post model) en reacties (Comment model).
ForeignKey wordt gebruikt om een “veel-op-een”-relatie te definiëren wat betekent dat meerdere objecten van het ene model kunnen verwijzen naar één enkel object van het andere model. In ons blogvoorbeeld kan een gebruiker (User) meerdere blogberichten (Posts) schrijven.
In het Post-model zou dat er zo uitzien:
```
class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
# andere velden…
```
ManyToManyField wordt gebruikt wanneer objecten van beide modellen kunnen verwijzen naar meerdere objecten van het andere model. Het commentaarmodel zou een ManyToMany-relatie kunnen hebben met het User-model: een User kan meerdere reacties achterlaten en elke reactie kan door meerdere Users worden gemaakt (in het geval van co-auteurschap van commentaren).
```
class Comment(models.Model):
users = models.ManyToManyField(User)
# andere velden…
```
OneToOneField wordt gebruikt om een “een-op-een”-relatie te definiëren. Dit betekent dat een object van het ene model kan verwijzen naar precies één object van het andere model, en omgekeerd. Bijvoorbeeld, elk User-profiel (Profielmodel) kan gekoppeld zijn aan precies één User:
```
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
# andere velden…
```
Bij het definiëren van deze relaties, bepaalt de keuze van het ‘on\_delete’-argument wat er gebeurt als het gerelateerde object wordt verwijderd. CASCADE betekent bijvoorbeeld dat wanneer het verwante User-object wordt verwijderd, ook het gerelateerde Profile-object wordt verwijderd.
Bronnen:
- Django-Documentatie over model-relatievelden, beschikbaar op: https://docs.djangoproject.com/en/3.2/topics/db/models/#relationships
- Een uitleg van Eliot Andrade op Medium: “Understanding Django Model Relationships.” beschikbaar op: https://medium.com/@eliotandrade/understanding-django-model-relationships-579bfa175c9a