【问题标题】:How can I get results from multiple models with Django REST Framework如何使用 Django REST Framework 从多个模型中获取结果
【发布时间】:2014-03-12 07:13:10
【问题描述】:

我有一些模型:用户/喜欢/不喜欢...

class Like(models.Model):
""" Like """
    user = models.ForeignKey(User)
    movie_id = models.IntegerField()
    created = models.DateTimeField(auto_now_add=True)

class Dislike(models.Model):
""" Dislike """
    user = models.ForeignKey(User)
    movie_id = models.IntegerField()
    created = models.DateTimeField(auto_now_add=True)

如何通过电影 ID 列表和当前用户使用 Django REST 框架获得这样的结果?

movie_id = [11111,22222,33333,44444]

{
"results": [
    {
        "movie_id": 125405, 
        "like": True, 
        "dislike": False,
    }, 
    ...
    ]
}

LikeSerializer:

class LikeSerializer(serializers.ModelSerializer):
    user = UserSerializer(required=False)

    class Meta:
        model = Like
        fields = ('id', 'user', 'movie_id', 'created')


class LikeViewSet(viewsets.ModelViewSet):
    model = Like
    serializer_class = LikeSerializer
    permission_classes = (IsAuthenticated,)

DisLikeSerializer:

class DislikeSerializer(serializers.ModelSerializer):
    user = UserSerializer(required=False)

    class Meta:
        model = Dislike
        fields = ('id', 'user', 'movie_id', 'created')


class DislikeViewSet(viewsets.ModelViewSet):
    model = Dislike
    serializer_class = DislikeSerializer
    permission_classes = (IsAuthenticated,)

谢谢...

【问题讨论】:

  • 显示你的LikeViewSetDislikeViewSet类的代码。
  • 添加了答案。试试看 。让我知道。工作与否。未测试。

标签: python django django-rest-framework


【解决方案1】:

您可以在 response 中添加自定义字段。

这里我们不能使用 like 。作为它在 python 中的保留关键字。请参阅此代码。对不喜欢执行相同的操作。

class LikeSerializer(serializers.ModelSerializer):
    user = UserSerializer(required=False)
    likes = serializers.SerializerMethodField('no_likes_get')

    def no_likes_get(self, like_obj):
        return Like.objects.filter(movie_id = like_obj.movie_id).count()

    class Meta:
        model = Like
        fields = ('id', 'user', 'movie_id', 'likes')

【讨论】:

  • 感谢您的回答,我已经更改了我的模型,状态:喜欢/不喜欢/等。
  • 我没用过SerializerMethodField,这次试了一下,棒极了!
猜你喜欢
  • 2014-01-09
  • 2013-11-11
  • 2013-09-13
  • 2016-08-03
  • 1970-01-01
  • 2014-05-13
  • 2013-01-17
  • 2018-10-19
  • 1970-01-01
相关资源
最近更新 更多