diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 0b089deac..119a306ea 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -608,6 +608,21 @@ class DocumentSerializer( instance.save() if "created_date" in validated_data: validated_data.pop("created_date") + if instance.custom_fields.count() > 0 and "custom_fields" in validated_data: + for custom_field_instance in instance.custom_fields.filter( + field__data_type=CustomField.FieldDataType.DOCUMENTLINK, + ): + if custom_field_instance.field not in [ + field["field"] for field in validated_data["custom_fields"] + ]: + # Doc link field is being removed entirely + for doc_id in custom_field_instance.value: + CustomFieldInstanceSerializer.remove_doclink( + None, + instance, + custom_field_instance.field, + doc_id, + ) super().update(instance, validated_data) return instance diff --git a/src/documents/tests/test_api_custom_fields.py b/src/documents/tests/test_api_custom_fields.py index 1cb2c6c02..545a0355e 100644 --- a/src/documents/tests/test_api_custom_fields.py +++ b/src/documents/tests/test_api_custom_fields.py @@ -476,3 +476,17 @@ class TestCustomField(DirectoriesMixin, APITestCase): self.assertEqual(doc2.custom_fields.first().value, [1]) self.assertEqual(doc3.custom_fields.first().value, [1]) self.assertEqual(doc4.custom_fields.first().value, []) + + # Removes the field entirely + resp = self.client.patch( + f"/api/documents/{doc1.id}/", + data={ + "custom_fields": [], + }, + format="json", + ) + + self.assertEqual(resp.status_code, status.HTTP_200_OK) + self.assertEqual(doc2.custom_fields.first().value, []) + self.assertEqual(doc3.custom_fields.first().value, []) + self.assertEqual(doc4.custom_fields.first().value, [])