From c838bc46cff092837281947c6572683d37891fe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexa=20Valentov=C3=A1?= <git@imaniti.org> Date: Thu, 8 May 2025 11:57:32 +0200 Subject: [PATCH] Handle auto-imported contracts better --- Makefile | 2 +- contracts/admin.py | 14 ++++++++++---- contracts/forms.py | 1 + 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 3dd614c..67fcce0 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 ba5f4fd..fee77c6 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 bb3f457..d594115 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, -- GitLab