From 017cedaf92455a9e132bfd7b48d78b54dcd7a80c Mon Sep 17 00:00:00 2001 From: mkovalua Date: Mon, 1 Dec 2025 17:14:53 +0200 Subject: [PATCH 1/2] get default_license_id on preprint creation to handle it on FE (looks like it is not used drafts/id/metadata) for prepints in browser url so for get request is is redundant get default_license_id on draft registration creation (to get for FE after creation) and also for GET/ request to get it on drafts/id/metadata request --- api/draft_registrations/serializers.py | 3 +++ api/preprints/serializers.py | 1 + 2 files changed, 4 insertions(+) diff --git a/api/draft_registrations/serializers.py b/api/draft_registrations/serializers.py index dbb761d0df1..f08426d32a7 100644 --- a/api/draft_registrations/serializers.py +++ b/api/draft_registrations/serializers.py @@ -98,6 +98,7 @@ class DraftRegistrationSerializer(DraftRegistrationLegacySerializer, Taxonomizab ) has_project = ser.SerializerMethodField() + default_license_id = ser.CharField(source='provider.default_license._id', read_only=True, default='') def get_has_project(self, obj): return obj.has_project @@ -164,6 +165,8 @@ class DraftRegistrationDetailSerializer(DraftRegistrationSerializer, DraftRegist 'self': 'get_self_url', }) + default_license_id = ser.CharField(source='provider.default_license._id', read_only=True, default='') + def get_self_url(self, obj): return absolute_reverse( 'draft_registrations:draft-registration-detail', diff --git a/api/preprints/serializers.py b/api/preprints/serializers.py index d47cc9098dc..b127d074f61 100644 --- a/api/preprints/serializers.py +++ b/api/preprints/serializers.py @@ -254,6 +254,7 @@ class PreprintSerializer(TaxonomizableSerializerMixin, MetricsSerializerMixin, J why_no_prereg = ser.CharField(required=False, allow_blank=True, allow_null=True) prereg_links = ser.ListField(child=ser.URLField(), required=False) prereg_link_info = ser.ChoiceField(Preprint.PREREG_LINK_INFO_CHOICES, required=False, allow_blank=True) + default_license_id = ser.CharField(source='provider.default_license._id', read_only=True, default='') class Meta: type_ = 'preprints' From 102cd0eed99d753d7b40171246af759a58cba10b Mon Sep 17 00:00:00 2001 From: mkovalua Date: Fri, 9 Jan 2026 15:47:18 +0200 Subject: [PATCH 2/2] implement asc sorting for admin brand tab and showing brand related unique provider types --- admin/templates/brands/list.html | 4 +++- api/draft_registrations/serializers.py | 3 --- api/preprints/serializers.py | 1 - osf/models/brand.py | 13 +++++++++++++ 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/admin/templates/brands/list.html b/admin/templates/brands/list.html index fcdc512849c..5335ff923f6 100644 --- a/admin/templates/brands/list.html +++ b/admin/templates/brands/list.html @@ -17,12 +17,14 @@

List of Brands

Name + Service - {% for brand in brands %} + {% for brand in brands|dictsort:"name" %} {{ brand.name }} + {{ brand.get_provider_types }} {% endfor %} diff --git a/api/draft_registrations/serializers.py b/api/draft_registrations/serializers.py index f08426d32a7..dbb761d0df1 100644 --- a/api/draft_registrations/serializers.py +++ b/api/draft_registrations/serializers.py @@ -98,7 +98,6 @@ class DraftRegistrationSerializer(DraftRegistrationLegacySerializer, Taxonomizab ) has_project = ser.SerializerMethodField() - default_license_id = ser.CharField(source='provider.default_license._id', read_only=True, default='') def get_has_project(self, obj): return obj.has_project @@ -165,8 +164,6 @@ class DraftRegistrationDetailSerializer(DraftRegistrationSerializer, DraftRegist 'self': 'get_self_url', }) - default_license_id = ser.CharField(source='provider.default_license._id', read_only=True, default='') - def get_self_url(self, obj): return absolute_reverse( 'draft_registrations:draft-registration-detail', diff --git a/api/preprints/serializers.py b/api/preprints/serializers.py index b127d074f61..d47cc9098dc 100644 --- a/api/preprints/serializers.py +++ b/api/preprints/serializers.py @@ -254,7 +254,6 @@ class PreprintSerializer(TaxonomizableSerializerMixin, MetricsSerializerMixin, J why_no_prereg = ser.CharField(required=False, allow_blank=True, allow_null=True) prereg_links = ser.ListField(child=ser.URLField(), required=False) prereg_link_info = ser.ChoiceField(Preprint.PREREG_LINK_INFO_CHOICES, required=False, allow_blank=True) - default_license_id = ser.CharField(source='provider.default_license._id', read_only=True, default='') class Meta: type_ = 'preprints' diff --git a/osf/models/brand.py b/osf/models/brand.py index 5a857f5f3b1..fc162ea3c90 100644 --- a/osf/models/brand.py +++ b/osf/models/brand.py @@ -25,5 +25,18 @@ class Meta: secondary_color = models.CharField(max_length=7) background_color = models.CharField(max_length=7, blank=True, null=True) + def get_provider_types(self): + unique_types = self.providers.values_list('type', flat=True).distinct() + results = [] + # cast osf.collectionprovider, osf.registrationprovider, osf.preprintprovider to more readable UI format + for unique_type in unique_types: + if 'registration' in unique_type: + results.append('Registry') + elif 'collection' in unique_type: + results.append('Collection') + elif 'preprint' in unique_type: + results.append('Preprint') + return ', '.join(results) + def __str__(self): return f'{self.name} ({self.id})'