feat:cms relation hospital bug fix

This commit is contained in:
2026-06-17 10:22:51 +08:00
parent 2bb9ff50d8
commit 89ab844343
5 changed files with 274 additions and 39 deletions
+16 -3
View File
@@ -9,10 +9,15 @@ class CmsInstitutionSerializer(serializers.ModelSerializer):
"""CMS 机构(医院)序列化器。
- `code` 显式声明以去掉默认 UniqueValidator,改用自定义错误码校验唯一性。
- `banner_url` 返回可访问的完整 URL(未配置时为空串,便于管理端识别「未设图」)。
- `banner_url` **可写**(新增/编辑可传,可选):入参可为静态相对路径(如
`institutions/xxx.png`)或完整 `http(s)` URL**输出**统一转为可访问的完整 URL
(未配置时为空串,便于管理端识别「未设图」)。传空串则清空。
"""
code = serializers.CharField(max_length=100)
banner_url = serializers.SerializerMethodField()
banner_url = serializers.CharField(
max_length=500, required=False, allow_blank=True,
help_text='机构 Banner 图:相对静态路径或完整 http(s) URL;可选,传空串清空',
)
class Meta:
model = Institution
@@ -22,7 +27,12 @@ class CmsInstitutionSerializer(serializers.ModelSerializer):
]
read_only_fields = ['id', 'created_at', 'updated_at']
def get_banner_url(self, obj):
def to_representation(self, instance):
data = super().to_representation(instance)
data['banner_url'] = self._full_banner_url(instance)
return data
def _full_banner_url(self, obj):
if not obj.banner_url:
return ''
value = obj.banner_url
@@ -33,6 +43,9 @@ class CmsInstitutionSerializer(serializers.ModelSerializer):
path = prefix + '/' + settings.STATIC_URL.strip('/') + '/' + value.lstrip('/')
return request.build_absolute_uri(path) if request else path
def validate_banner_url(self, value):
return (value or '').strip()
def validate_code(self, value):
value = (value or '').strip()
if not value: