diff --git a/Makefile b/Makefile
index 3dd614c86ac23378503faeb83ea56ac0ea4bf49c..67fcce0de7bdc7f54f95e5a5f60a02e7ca188ee5 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 #!/usr/bin/make -f
 
-PYTHON   = python3.11
+PYTHON   = python3.12
 VENV     = .venv
 PORT     = 8013
 SETTINGS = registry.settings.dev
diff --git a/contracts/admin.py b/contracts/admin.py
index ba5f4fd6213308dd772f3e510a5fb7634dd8cfef..fee77c60e5c877aa7c6e253853da9f2e9bffe27a 100644
--- a/contracts/admin.py
+++ b/contracts/admin.py
@@ -88,7 +88,9 @@ class OwnPermissionsMixin(
     )
 ):
     def save_model(self, request, obj, form, change):
-        if obj.created_by is None:
+        # If there is a primary key already assigned, this is an auto-generated
+        # contract that shouldn't have an author at all.
+        if obj.created_by is None and obj.pk is None:
             obj.created_by = request.user
 
         return super().save_model(request, obj, form, change)
@@ -250,7 +252,7 @@ class ContractAdmin(
     search_fields = ("name",)
 
     readonly_fields = (
-        "created_by",
+        # "created_by",  -- Dynamic
         "created_on",
         "updated_on",
     )
@@ -606,8 +608,6 @@ class ContractAdmin(
         return parent_save_response
 
     def get_readonly_fields(self, request, obj=None):
-        readonly_fields = []
-
         fields = []
 
         for fieldset in self.get_fieldsets(request):
@@ -621,8 +621,14 @@ class ContractAdmin(
         ):
             fields.remove("status")
 
+            if request.user.is_superuser:
+                fields.remove("created_by")
+
             return fields
 
+        if not request.user.is_superuser:
+            return list(self.readonly_fields) + ["created_by"]
+
         return list(self.readonly_fields)
 
     def has_change_permission(self, request, obj=None):
diff --git a/contracts/forms.py b/contracts/forms.py
index bb3f457964809ba5f581d792b07e72418ed51735..d594115ea2af8000ac7b53e0b25156d68ab992e4 100644
--- a/contracts/forms.py
+++ b/contracts/forms.py
@@ -94,6 +94,7 @@ class ContractAdminForm(forms.ModelForm):
                     and choice_key == Contract.StatusTypes.TO_BE_APPROVED
                     and self.current_user.has_perm("contracts.approve")
                 ):
+                    print("allowing")
                     allowed_choices.append(
                         (
                             choice_key,