如何在Django Rest Framework中获取外键关联表的文件字段文件名
问题解决
修正后的序列化器代码
import os from rest_framework import serializers from .models import IndividualUser, MemberCatalogue class MemberCatalogueSerializer(serializers.ModelSerializer): # 新增filename字段,提取文件原始名称 filename = serializers.SerializerMethodField() # 外键字段直接输出关联的membership_id字符串 membership_id = serializers.CharField(source='membership_id.membership_id') def get_filename(self, obj): # 用os.path.basename安全提取文件名,避免手动分割路径的兼容性问题 return os.path.basename(obj.files.name) class Meta: model = MemberCatalogue fields = ['id','membership_id', 'files', 'filename'] class IndividualMembersSerializer(serializers.ModelSerializer): member_catalogue = MemberCatalogueSerializer(many=True) class Meta: model = IndividualUser fields = "__all__"
改动说明
- 将
filename字段移到MemberCatalogueSerializer中,匹配预期返回结构:文件名属于子级文件对象的属性,不是用户主表的属性 - 修正
IndividualMembersSerializer绑定的模型类为实际定义的IndividualUser,解决类名不匹配导致的取值错误 - 对
MemberCatalogueSerializer中的外键membership_id指定输出源为关联用户的主键字段,避免默认返回外键对象的异常输出 - 不需要额外重写
files字段定义,ModelSerializer会自动处理FileField的绝对路径输出,和原有路径格式保持一致
内容的提问来源于stack exchange,提问作者ank
相关产品推荐
相关产品推荐

