在外键django rest框架的基础上序列化数据数组

时间:2017-10-17 20:11:11

标签: python django django-models django-rest-framework

我正在使用django rest框架在收藏夹表中将property_id作为外键发布,并且基于外键我想从属性表中获取所有字段。

class Favorites(models.Model):
    """Store favorite property"""

    user_id = models.ForeignKey(User, on_delete=models.CASCADE)
    property_id = models.ForeignKey(Property, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True, blank=True)

串行:

class FavoriteSerializer(serializers.ModelSerializer):
    """Favorite Properties serializer"""

    class Meta:
        model = Favorites
        fields = ('user_id','property_id', )

视图集:

class FavoriteViewSet(viewsets.ModelViewSet):

    http_method_names = ['get','post' ]
    serializer_class = FavoriteSerializer
    queryset = Favorites.objects.all()

输出: enter image description here

这是我的第一个输出。然后我同步我的属性Serializer并得到这个:

enter image description here

这是我需要的输出,但它会在帖子中产生问题。在帖子中我只需要user_id和property_id,但它使我的帖子形式如下:

enter image description here

有关我如何实现结果的任何建议吗?

1 个答案:

答案 0 :(得分:2)

serializers.py

class FavoriteCreateSerializer(serializers.ModelSerializer):
    """Favorite Properties serializer"""

    class Meta:
        model = Favorites
        fields = ('user_id','property_id', )

class FavoriteListSerializer(serializers.ModelSerializer):
    property_id = PropertySerializer(read_only=True)

    class Meta:
        model = Favorites
        fields = ('user_id','property_id', )

views.py

class FavoriteViewSet(viewsets.ModelViewSet):

    http_method_names = ['get','post' ]
    serializer_class = FavoriteSerializer
    queryset = Favorites.objects.all()

    def get_serializer_class(self):
            if self.action == 'create':
                return FavoriteCreateSerializer
            else:
                return self.serializer_class