Remove symmetrical doc links when entire custom field removed

This commit is contained in:
shamoon 2023-12-09 00:30:28 -08:00
parent 74e81d673a
commit 2e7f7d1d6d
2 changed files with 29 additions and 0 deletions

View File

@ -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

View File

@ -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, [])