diff --git a/aleksis/apps/tezor/models/invoice.py b/aleksis/apps/tezor/models/invoice.py
index 53802420cef79df055d1c651134701c443466d28..5d84ec5289db3f616e99c06d4aefc42e2d5bf588 100644
--- a/aleksis/apps/tezor/models/invoice.py
+++ b/aleksis/apps/tezor/models/invoice.py
@@ -67,8 +67,10 @@ class Invoice(BasePayment, PureDjangoModel):
     number = models.CharField(verbose_name=_("Invoice number"), max_length=255)
     due_date = models.DateField(verbose_name=_("Payment due date"), null=True)
 
-    for_content_type = models.ForeignKey(ContentType, on_delete=models.SET_NULL, null=True)
-    for_object_id = models.PositiveIntegerField()
+    for_content_type = models.ForeignKey(
+        ContentType, on_delete=models.SET_NULL, null=True, blank=True
+    )
+    for_object_id = models.PositiveIntegerField(null=True, blank=True)
     for_object = GenericForeignKey("for_content_type", "for_object_id")
 
     # For manual invoicing
@@ -119,7 +121,10 @@ class Invoice(BasePayment, PureDjangoModel):
         constraints = [
             models.UniqueConstraint(fields=["number", "group"], name="number_uniq_per_group"),
             models.CheckConstraint(
-                check=(Q(for_object_id__isnull=True) | Q(person__isnull=True)),
+                check=(
+                    (Q(for_object_id__isnull=True) & Q(person__isnull=False))
+                    | (Q(for_object_id__isnull=False) & Q(person__isnull=True))
+                ),
                 name="object_or_person",
             ),
         ]