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

Django序列化问题:返回索引而非电影字段,如何关联序列化器?

解决Django序列化关联模型返回完整字段的问题

嘿,这个问题我熟!你已经写好两个序列化器了,只需要把它们嵌套关联起来就能实现需求,操作超简单:

你只需要修改MoviesCategoriesSerializer,把原来的movies字段替换成用MovieSerializer来序列化——因为movies是一个多对象的关联(一个分类对应多个电影),所以要加上many=True参数:

# 先确保MovieSerializer已经定义在前面
class MovieSerializer(serializers.ModelSerializer):
    class Meta:
        model = Movie
        fields = ('name', 'thumbnail', 'source_url', 'duration')

class MoviesCategoriesSerializer(serializers.ModelSerializer):
    # 用MovieSerializer序列化关联的movies集合
    movies = MovieSerializer(many=True)
    
    class Meta:
        model = MoviesCategories
        fields = ('name', 'movies')

修改后再执行MoviesCategoriesSerializer(MoviesCategories.objects.first()).data,返回的结果就会包含每个电影的完整字段,而不是仅主键ID了,示例结果大概是这样:

{
    'name': 'Animations',
    'movies': [
        {
            'name': 'Toy Story',
            'thumbnail': 'toystory_thumb.jpg',
            'source_url': 'https://example.com/toystory',
            'duration': '01:21:00'
        },
        {
            'name': 'Frozen',
            'thumbnail': 'frozen_thumb.jpg',
            'source_url': 'https://example.com/frozen',
            'duration': '01:42:00'
        }
    ]
}

原理很直白:Django REST Framework的嵌套序列化器会自动遍历关联的movies集合,用你指定的MovieSerializer逐个序列化每个电影对象,把完整的字段数据返回给你。

如果你的序列化器定义顺序有问题(比如MoviesCategoriesSerializer写在MovieSerializer前面),也可以用字符串引用的方式避免报错:

class MoviesCategoriesSerializer(serializers.ModelSerializer):
    movies = 'MovieSerializer'(many=True)
    
    class Meta:
        model = MoviesCategories
        fields = ('name', 'movies')

这样就完美解决你的需求啦!

内容的提问来源于stack exchange,提问作者E_K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:51:21