【发布时间】:2019-05-17 16:48:24
【问题描述】:
我是 Django 中 Rest Framework 的新手,我有一个练习。我想从两个 Django 模型创建自定义 JSON 输出。我已经创建了两个序列化视图。输出 JSON 应该是:
{
"movie_id": 2,
"total_comments": 4,
"rank": 1
},
{
"movie_id": 3,
"total_comments": 2,
"rank": 2
},
{
"movie_id": 4,
"total_comments": 2,
"rank": 2
}
GET /top url 应该:
应根据在指定日期范围内添加到电影(如示例中)的 cmets 数量返回数据库中已存在的热门电影排名。响应应包括电影 ID、排名位置和 cmets 总数(在指定日期范围内)。
cmet 数量相同的电影在排名中的位置应该相同。
应要求指定生成统计信息的日期范围。
我有两个序列化器:
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model= Comment
fields=('movie','user','timestamp','content','approved')
class MovieSerializer(DynamicFieldsModelSerializer,serializers.HyperlinkedModelSerializer):
comments=CommentSerializer(many=True)
comments=None
class Meta:
model = Movie
fields = ('id','name','description','year','released','comments','rating')
这是评论模型:
class Comment(models.Model):
movie = models.ForeignKey(Movie, on_delete=models.DO_NOTHING,related_name='comments',blank=True,null=True)
content = models.TextField()
timestamp = models.DateTimeField(default=timezone.now)
user=models.CharField(max_length=250)
我试图通过这个技巧自己做到这一点:
class MovieViewSet(viewsets.ModelViewSet):
queryset = Movie.objects.all()
serializer_class = MovieSerializer
class CommentViewSet(viewsets.ModelViewSet):
queryset = Comment.objects.all()
serializer_class = CommentSerializer
class TopViewSet(viewsets.ModelViewSet):
serializer_class = MovieSerializer
#queryset = Movie.objects.annotate(comment_count=(Count('comments'))).order_by("-comment_count","-rating")
queryset = Movie.objects.all().annotate(comment_count=(Count('comments'))).order_by("-comment_count")
但我不知道如何创建自定义 JSON 输出
如果有人能在最后一点(即日期)也帮助我,我将不胜感激。
【问题讨论】:
标签: python django serialization django-rest-framework