You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:54:04