2014-03-12 44 views
0

我有几种模式:用户/喜欢/不喜欢......我怎样才能从多个模型的结果与Django的REST框架

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) 

我怎样才能得到这样Django的REST框架结果进行movie_id列表当前用户?

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,) 

谢谢...

+0

显示'LikeViewSet'和'DislikeViewSet'类的代码。 –

+0

补充,thks .... – Flowerowl

+0

添加答案。尝试一下 。让我知道。工作与否。未经测试。 –

回答

0

你可以添加自定义字段到响应。我们不能使用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') 
+0

thks为您的答案,我已经改变了我的模型,状态:喜欢/不喜欢/等。 – Flowerowl

+0

我从来没有使用过SerializerMethodField,这次我试试它,太棒了! – Flowerowl