class LegacyDatasetUpdateSerializer(CommonNestedModelSerializer):
"""Serializer for updating migrated dataset fields.
Behaves mostly like DatasetSerializer but has less validation and allows
direct modification of some fields that aren't exposed in the usual .
"""
actors = DatasetActorSerializer(required=False, many=True)
access_rights = AccessRightsModelSerializer(required=False, allow_null=True, many=False)
field_of_science = FieldOfScience.get_serializer_field(required=False, many=True)
infrastructure = ResearchInfra.get_serializer_field(required=False, many=True)
actors = DatasetActorSerializer(required=False, many=True)
fileset = FileSetSerializer(required=False, source="file_set", allow_null=True)
remote_resources = RemoteResourceSerializer(many=True, required=False)
language = Language.get_serializer_field(required=False, many=True)
other_identifiers = OtherIdentifierModelSerializer(required=False, many=True)
theme = Theme.get_serializer_field(required=False, many=True)
spatial = SpatialModelSerializer(required=False, many=True)
temporal = TemporalModelSerializer(required=False, many=True)
relation = EntityRelationSerializer(required=False, many=True)
preservation = PreservationModelSerializer(required=False, many=False)
provenance = ProvenanceModelSerializer(required=False, many=True)
projects = ProjectModelSerializer(required=False, many=True)
allowed_actions = DatasetAllowedActionsSerializer(read_only=True, source="*")
created = serializers.DateTimeField(required=False, read_only=False)
modified = serializers.DateTimeField(required=False, read_only=False)
removed = serializers.DateTimeField(required=False, read_only=False, allow_null=True)
next_draft = LinkedDraftSerializer(read_only=True)
draft_of = LinkedDraftSerializer(read_only=True)
class Meta:
model = LegacyDataset
nonpublic_fields = [ # Additional fields that are not in the normal public serializer
"last_cumulative_addition",
"last_modified_by",
"cumulation_started",
"cumulation_ended",
]
fields = [
field
for field in DatasetSerializer.Meta.fields
if field
not in [
"metadata_owner", # assigned directly in LegacyDataset
"dataset_versions", # field is not writable
]
] + nonpublic_fields
def create(self, validated_data):
raise NotImplementedError(
"Creating a new LegacyDataset using the serializer is not supported."
)
def update(self, instance, validated_data):
instance._updating = True
super().update(instance, validated_data)
instance._updating = False
return instance