Add explicit schema types for presigned media URL fields

Swagger inferred these SerializerMethodFields as untyped strings and
warned on generation; annotate each with @extend_schema_field so the
generated OpenAPI schema declares them as nullable URLs.
This commit is contained in:
Ali Asadi 2026-08-18 10:48:36 +03:30
parent 85598d347a
commit 3748da1af7
2 changed files with 10 additions and 0 deletions

View file

@ -1,3 +1,4 @@
from drf_spectacular.utils import extend_schema_field
from rest_framework import serializers
from apps.core.media import presigned_media_url
@ -13,6 +14,7 @@ class ProductCategorySerializer(serializers.ModelSerializer):
model = ProductCategory
fields = ('uuid', 'name', 'parent', 'icon', 'icon_url', 'order')
@extend_schema_field(serializers.URLField(allow_null=True))
def get_icon_url(self, obj):
return presigned_media_url(obj.icon)
@ -28,6 +30,7 @@ class ProductListSerializer(serializers.ModelSerializer):
'is_active', 'is_out_of_stock',
)
@extend_schema_field(serializers.URLField(allow_null=True))
def get_image_url(self, obj):
return presigned_media_url(obj.image)
@ -60,6 +63,7 @@ class SellerProductSerializer(serializers.ModelSerializer):
)
read_only_fields = ('sold_count',)
@extend_schema_field(serializers.URLField(allow_null=True))
def get_image_url(self, obj):
return presigned_media_url(obj.image)

View file

@ -1,4 +1,5 @@
from django.contrib.gis.geos import Point
from drf_spectacular.utils import extend_schema_field
from rest_framework import serializers
from apps.core.media import presigned_media_url
@ -15,6 +16,7 @@ class StoreCategorySerializer(serializers.ModelSerializer):
model = StoreCategory
fields = ('uuid', 'name', 'icon', 'icon_url', 'order')
@extend_schema_field(serializers.URLField(allow_null=True))
def get_icon_url(self, obj):
return presigned_media_url(obj.icon)
@ -38,9 +40,11 @@ class StoreListSerializer(serializers.ModelSerializer):
'free_delivery_threshold', 'is_open',
)
@extend_schema_field(serializers.URLField(allow_null=True))
def get_logo_url(self, obj):
return presigned_media_url(obj.logo)
@extend_schema_field(serializers.URLField(allow_null=True))
def get_cover_image_url(self, obj):
return presigned_media_url(obj.cover_image)
@ -117,9 +121,11 @@ class SellerStoreSerializer(serializers.ModelSerializer):
)
read_only_fields = ('rating_avg', 'rating_count', 'status')
@extend_schema_field(serializers.URLField(allow_null=True))
def get_logo_url(self, obj):
return presigned_media_url(obj.logo)
@extend_schema_field(serializers.URLField(allow_null=True))
def get_cover_image_url(self, obj):
return presigned_media_url(obj.cover_image)