Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Django Upgrade] [ ENG-3948] Fix Draft Registration Serializer DRF Issues #10034

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion api/base/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

def get_resource_object_member(error_key, context):
from api.base.serializers import RelationshipField
field = context['view'].serializer_class._declared_fields.get(error_key, None)
cslzchen marked this conversation as resolved.
Show resolved Hide resolved
field = context['view'].get_serializer_class()._declared_fields.get(error_key, None)
if field:
return 'relationships' if isinstance(field, RelationshipField) else 'attributes'
# If field cannot be found (where read/write operations have different serializers,
Expand Down
21 changes: 19 additions & 2 deletions api/draft_registrations/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,19 @@
NodeContributorsSerializer,
NodeContributorsCreateSerializer,
NodeContributorDetailSerializer,
RegistrationSchemaRelationshipField,
)

from api.taxonomies.serializers import TaxonomizableSerializerMixin
from osf.exceptions import DraftRegistrationStateError
from osf.models import Node
from website import settings


class NodeRelationshipField(RelationshipField):

def to_internal_value(self, node_id):
node = self.context['view'].get_node(node_id=node_id) if node_id else None
return {'branched_from': node}
return {'branched_from': Node.load(node_id)}
cslzchen marked this conversation as resolved.
Show resolved Hide resolved


class DraftRegistrationSerializer(DraftRegistrationLegacySerializer, TaxonomizableSerializerMixin):
Expand All @@ -46,6 +48,13 @@ class DraftRegistrationSerializer(DraftRegistrationLegacySerializer, Taxonomizab
tags = ValuesListField(attr_name='name', child=ser.CharField(), required=False)
node_license = NodeLicenseSerializer(required=False, source='license')

registration_schema = RegistrationSchemaRelationshipField(
related_view='schemas:registration-schema-detail',
related_view_kwargs={'schema_id': '<registration_schema._id>'},
required=True,
read_only=False,
)
cslzchen marked this conversation as resolved.
Show resolved Hide resolved

links = LinksField({
'self': 'get_absolute_url',
})
Expand Down Expand Up @@ -142,6 +151,7 @@ class DraftRegistrationDetailSerializer(DraftRegistrationSerializer, DraftRegist
Overrides DraftRegistrationLegacySerializer to make id required.
registration_supplement, node, cannot be changed after draft has been created.
"""
id = IDField(source='_id', required=True)
cslzchen marked this conversation as resolved.
Show resolved Hide resolved

links = LinksField({
'self': 'get_self_url',
Expand All @@ -156,6 +166,13 @@ def get_self_url(self, obj):
},
)

registration_schema = RegistrationSchemaRelationshipField(
related_view='schemas:registration-schema-detail',
related_view_kwargs={'schema_id': '<registration_schema._id>'},
required=False,
read_only=False,
)
cslzchen marked this conversation as resolved.
Show resolved Hide resolved

def update(self, draft, validated_data):
draft = super(DraftRegistrationDetailSerializer, self).update(draft, validated_data)
user = self.context['request'].user
Expand Down