diff --git a/api/nodes/serializers.py b/api/nodes/serializers.py index 4f4dddc4bc5a..efb281ae0e6e 100644 --- a/api/nodes/serializers.py +++ b/api/nodes/serializers.py @@ -1618,10 +1618,6 @@ def create(self, validated_data): if registration_responses: self.update_registration_responses(draft, registration_responses) - if affiliate_user_institutions and isinstance(draft.branched_from, DraftNode): - for institution in draft.creator.get_institution_affiliations(): - draft.affiliated_institutions.add(*draft.creator.affiliated_institutions.all()) - return draft class Meta: diff --git a/osf/models/registrations.py b/osf/models/registrations.py index ceff62c98a2b..55306491de82 100644 --- a/osf/models/registrations.py +++ b/osf/models/registrations.py @@ -1251,42 +1251,31 @@ def system_tags(self): @classmethod def create_from_node(cls, user, schema, node=None, data=None, provider=None): - if not provider: - provider = RegistrationProvider.get_default() + provider = provider or RegistrationProvider.get_default() - if provider.is_default: - # If the default provider doesn't have schemas specified yet, allow all schemas - if provider.schemas.exists(): - provider.validate_schema(schema) - else: + if provider.is_default and provider.schemas.exists() or not provider.is_default: provider.validate_schema(schema) - excluded_attributes = [] - if not node: - # If no node provided, a DraftNode is created for you - node = DraftNode.objects.create(creator=user, title=settings.DEFAULT_DRAFT_NODE_TITLE) - # Force the user to add their own title for no-project - excluded_attributes.append('title') - - if not (isinstance(node, Node) or isinstance(node, DraftNode)): - raise DraftRegistrationStateError() + if node: + branched_from = node + excluded_attributes = [] + else: + branched_from = DraftNode.objects.create(creator=user, title=settings.DEFAULT_DRAFT_NODE_TITLE) + excluded_attributes = ['title'] draft = cls( initiator=user, - branched_from=node, + branched_from=branched_from, registration_schema=schema, registration_metadata=data or {}, provider=provider, ) draft.save() - draft.copy_editable_fields( - node, - save=True, - excluded_attributes=excluded_attributes - ) + draft.copy_editable_fields(branched_from, excluded_attributes=excluded_attributes) draft.update(data, auth=Auth(user)) - if node.type == 'osf.draftnode': + if not node: + draft.affiliated_institutions.set(draft.creator.get_institution_affiliations()) initiator_permissions = draft.contributor_set.get(user=user).permission signals.contributor_added.send( draft,