diff --git a/apps/member/models.py b/apps/member/models.py
index cdbb933274e7cdccd378d956bef1480ffbf750f7..d0051e59d612019df3f4cb104857ba743c09e713 100644
--- a/apps/member/models.py
+++ b/apps/member/models.py
@@ -4,6 +4,7 @@
 import datetime
 
 from django.conf import settings
+from django.core.exceptions import ValidationError
 from django.db import models
 from django.urls import reverse, reverse_lazy
 from django.utils.translation import gettext_lazy as _
@@ -67,6 +68,13 @@ class Club(models.Model):
     email = models.EmailField(
         verbose_name=_('email'),
     )
+    parent_club = models.ForeignKey(
+        'self',
+        null=True,
+        blank=True,
+        on_delete=models.PROTECT,
+        verbose_name=_('parent club'),
+    )
 
     # Memberships
     membership_fee = models.PositiveIntegerField(
@@ -158,6 +166,12 @@ class Membership(models.Model):
         else:
             return self.date_start.toordinal() <= datetime.datetime.now().toordinal()
 
+    def save(self, *args, **kwargs):
+        if self.club.parent_club is not None:
+            if not Membership.objects.filter(user=self.user, club=self.club.parent_club):
+                raise ValidationError(_('User is not a member of the parent club'))
+        super().save(*args, **kwargs)
+
     class Meta:
         verbose_name = _('membership')
         verbose_name_plural = _('memberships')