diff --git a/aleksis/core/models.py b/aleksis/core/models.py
index d8f63e606073f92e8db799206012cfc9a998a5d8..c0f03d34707c26e24ca6826cf5c9d4e7d87b10d5 100644
--- a/aleksis/core/models.py
+++ b/aleksis/core/models.py
@@ -1150,8 +1150,16 @@ class PersonInvitation(AbstractBaseInvitation, PureDjangoModel):
     def __str__(self) -> str:
         return f"{self.email} ({self.inviter})"
 
-    key_expired = Invitation.key_expired
+    @classmethod
+    def create(cls, email, inviter=None, **kwargs):
+        length = get_site_preferences()["auth__invite_code_length"]
+        packet_size = get_site_preferences()["auth__invite_code_packet_size"]
+        code = generate_random_code(length, packet_size)
 
+        instance = cls._default_manager.create(email=email, inviter=inviter, key=code, **kwargs)
+        return instance
+
+    key_expired = Invitation.key_expired
     send_invitation = Invitation.send_invitation