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

Django Rest:如何获取关联Director对象下的Product列表?

实现指定导演关联电影列表的解决方案

1. 修改序列化器(serializers.py)

在DirectorSerializer中添加反向关联的电影字段,利用Django外键的反向关联特性(默认名称为product_set),嵌套ProductSerializer返回完整的电影信息:

class ProductSerializer(serializers.ModelSerializer):
    director = serializers.StringRelatedField()
    class Meta:
        model = Product
        fields = '__all__'

class DirectorSerializer(serializers.ModelSerializer):
    # 新增反向关联的电影列表字段
    products = ProductSerializer(source='product_set', many=True, read_only=True)
    class Meta:
        model = Director
        fields = ['_id', 'firstname', 'lastname', 'products']

2. 添加单个导演详情视图(views.py)

新增视图用于根据导演ID获取其详情及执导的所有电影,同时用prefetch_related优化查询避免N+1问题:

@api_view(['GET'])
def getSingleDirector(request, pk):
    director = Director.objects.prefetch_related('product_set').get(_id=pk)
    serializer = DirectorSerializer(director, many=False)
    return Response(serializer.data)

补充路由配置(urls.py)

在项目路由中添加对应接口路径:

path('directors/<str:pk>/', views.getSingleDirector, name='director-detail'),

3. 前端实现逻辑

点击导演名称时,发送GET请求到/api/directors/{导演ID}/,接口返回的响应数据中products字段即为该导演执导的所有电影列表,直接渲染该列表即可。

可选优化:获取所有导演时直接携带电影列表

如果希望前端加载所有导演时就拿到对应电影数据,修改现有getDirector视图:

@api_view(['GET'])
def getDirector(request):
    directors = Director.objects.prefetch_related('product_set').all()
    serializer = DirectorSerializer(directors, many=True)
    return Response(serializer.data)

这样前端可直接从导演对象的products属性中读取电影列表,无需额外请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:40:30