From 3292a0e7ccd92ed132d08e90941f8f80333aa339 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 21 Mar 2026 08:49:52 -0700 Subject: [PATCH] Fix: validate date CF value in serializer (#12410) --- src/documents/serialisers.py | 2 + src/documents/tests/test_api_custom_fields.py | 38 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index ea8cc70b6..011045ea8 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -967,6 +967,8 @@ class CustomFieldInstanceSerializer(serializers.ModelSerializer): getattr(request, "user", None) if request is not None else None, doc_ids, ) + elif field.data_type == CustomField.FieldDataType.DATE: + data["value"] = serializers.DateField().to_internal_value(data["value"]) return data diff --git a/src/documents/tests/test_api_custom_fields.py b/src/documents/tests/test_api_custom_fields.py index 998bc445a..9a775dc9d 100644 --- a/src/documents/tests/test_api_custom_fields.py +++ b/src/documents/tests/test_api_custom_fields.py @@ -1425,3 +1425,41 @@ class TestCustomFieldsAPI(DirectoriesMixin, APITestCase): self.assertEqual(response.status_code, status.HTTP_200_OK) results = response.data["results"] self.assertEqual(results[0]["document_count"], 0) + + def test_patch_document_invalid_date_custom_field_returns_validation_error(self): + """ + GIVEN: + - A date custom field + - A document + WHEN: + - Patching the document with a date string in the wrong format + THEN: + - HTTP 400 is returned instead of an internal server error + - No custom field instance is created + """ + cf_date = CustomField.objects.create( + name="datefield", + data_type=CustomField.FieldDataType.DATE, + ) + doc = Document.objects.create( + title="Doc", + checksum="123", + mime_type="application/pdf", + ) + + response = self.client.patch( + f"/api/documents/{doc.pk}/", + { + "custom_fields": [ + { + "field": cf_date.pk, + "value": "10.03.2026", + }, + ], + }, + format="json", + ) + + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + self.assertIn("custom_fields", response.data) + self.assertEqual(CustomFieldInstance.objects.count(), 0)