diff --git a/tom_targets/sharing.py b/tom_targets/sharing.py index 8dea14260..8f9b3a311 100644 --- a/tom_targets/sharing.py +++ b/tom_targets/sharing.py @@ -1,10 +1,11 @@ +from tom_targets.base_models import get_target_model_app_label, BaseTarget import requests from django.conf import settings from django.core.exceptions import ImproperlyConfigured from tom_targets.serializers import TargetSerializer -from tom_targets.models import PersistentShare +from tom_targets.models import PersistentShare, get_target_model_class from tom_dataproducts.sharing import (share_data_with_tom, get_destination_target, sharing_feedback_converter) @@ -37,6 +38,20 @@ def continuous_share_data(target, reduced_datums): share_data_with_tom(share_destination, None, None, None, selected_data=reduced_datum_pks) +def custom_target_to_extras(target_id) -> list[dict]: + target_app_label = get_target_model_app_label() + extra_fields = [] + if target_app_label != 'tom_targets': + target = get_target_model_class().objects.get(pk=target_id) + for field in target._meta.get_fields(): + if field not in BaseTarget._meta.get_fields() and field.name not in ['id', 'basetarget_ptr']: + value = getattr(target, field.name, None) + if value is not None: + extra_fields.append({'key': field.name, 'value': str(value)}) + + return extra_fields + + def share_target_with_tom(share_destination, form_data, target_lists=()): """ Share a target with a remote TOM. @@ -76,6 +91,11 @@ def share_target_with_tom(share_destination, form_data, target_lists=()): if destination_target_id is None: # If target is not in Destination, serialize and create new target. serialized_target = TargetSerializer(form_data['target']).data + # If the shared target is a custom model custom fields should still be shared. + # Because the destination TOM might not have the same fields, we convert them to + # target extras. + extra_extras = custom_target_to_extras(serialized_target['id']) + serialized_target['targetextra_set'].extend(extra_extras) # Remove local User Groups serialized_target['groups'] = [] # Add target lists diff --git a/tom_targets/templates/tom_targets/target_share.html b/tom_targets/templates/tom_targets/target_share.html index e191afcf2..de771fa00 100644 --- a/tom_targets/templates/tom_targets/target_share.html +++ b/tom_targets/templates/tom_targets/target_share.html @@ -23,7 +23,7 @@