【发布时间】:2021-07-03 12:44:39
【问题描述】:
完美的场景是在 MovieSerializer 中使用 RatingSerializer,但由于它低于实际的 mvserializer 代码,我无法使用它。因此,我开始使用 json.dumps() 序列化评分对象,序列化后看起来很丑。
序列化器.py
class MovieSerializer(serializers.ModelSerializer):
id = 15414
director = PersonSerializer()
rating = serializers.SerializerMethodField() # I want to use here RatingSerializer()
def get_rating(self, obj):
r = list(Rating.objects.filter(movie_id=self.id).values())[0]
r['rating'] = float(r['rating'])
return json.dumps(r)
class Meta:
model = Movie
fields = ['id', 'title', 'director', 'rating']
class RatingSerializer(serializers.ModelSerializer):
movie = MovieSerializer()
class Meta:
model = Rating
fields = ['id', 'movie', 'rating', 'votes']
结果,评分字段被序列化得很糟糕
{
"id": 16906,
"title": "Frivolinas",
"director": {
"id": 2014,
"name": "Iron Eyes Cody",
"birth": 1907
},
"rating": "{\"id\": 1, \"movie_id\": 15414, \"rating\": 5.4, \"votes\": 12}"
},
有没有办法可以在 MovieSerializer 中使用 RatingSerializer? 这样做(我的方式),我也无法在 get_rating 方法中找到实际的 id,我已经对其进行了硬编码。
【问题讨论】:
-
你不能使用底部的
RatingSerializer,因为这会导致无限递归:序列化电影会将所有相关的评级与对应的电影序列化,等等。
标签: json django django-models serialization django-rest-framework