Django REST Framework收藏接口未返回Show字段问题求助
问题:Favorite ViewSet返回结果缺少show字段
开发用户收藏演出功能时,User和Show的ViewSet运行正常,但存储用户与演出关联关系的Favorite ViewSet返回结果仅包含id和user字段,show字段缺失。数据库中关联数据实际存在,可通过ORM正常查询到关联的show和user,曾尝试排除Show序列化器中的user字段解决循环引用,但问题未解决。
当前收藏接口返回结果:
[ { "id":2, "user":{ "username":"poduck", "first_name":"", "last_name":"", "email":"poduck@gmail.com", "image":null, "url":"http://0.0.0.0:8000/api/users/poduck/?format=json" } } ]
解决方案
1. 修复FavoriteViewSet的查询集与模型导入
原代码中FavoriteViewSet的queryset错误指向了Show.objects.all(),且未导入Favorite模型,导致返回的是演出数据而非收藏关联数据。
修改后的shows.api.viewsets:
from car_show_helper.shows.models import Show, Favorite # 新增Favorite模型导入 from .serializers import ShowSerializer, FavoriteSerializer from rest_framework import viewsets class ShowViewSet(viewsets.ModelViewSet): queryset = Show.objects.all() serializer_class = ShowSerializer class FavoriteViewSet(viewsets.ModelViewSet): queryset = Favorite.objects.all() # 改为查询Favorite模型数据 serializer_class = FavoriteSerializer
2. 修正FavoriteSerializer的show字段配置
Favorite模型中show是ForeignKey(一对一关联),但原序列化器错误添加了many=True参数,导致DRF尝试将单个show实例当作集合处理,最终无法序列化显示。
修改后的shows.api.serializers:
from rest_framework import serializers from shows.models import Show, Favorite from users.api.serializers import UserSerializer class ShowSerializer(serializers.ModelSerializer): user = UserSerializer() class Meta: model = Show fields = '__all__' class FavoriteSerializer(serializers.ModelSerializer): show = ShowSerializer(read_only=True) # 移除many=True参数 user = UserSerializer() class Meta: model = Favorite fields = '__all__'
3. 可选:处理潜在循环引用(若仍有问题)
如果UserSerializer中也嵌套了ShowSerializer或FavoriteSerializer,会引发循环序列化问题。此时可以:
- 将嵌套序列化改为主键引用:
user = serializers.PrimaryKeyRelatedField(read_only=True) - 或在序列化器中指定仅返回必要字段:
class ShowSerializer(serializers.ModelSerializer): user = UserSerializer(fields=['username', 'email']) # 只返回需要的字段 class Meta: model = Show fields = '__all__'
内容的提问来源于stack exchange,提问作者PoDuck
相关产品推荐
相关产品推荐

