代码之家  ›  专栏  ›  技术社区  ›  user2896120

向序列化程序添加外键数据?

  •  0
  • user2896120  · 技术社区  · 6 年前

    我正在尝试使用Django Rest框架来生成一些JSON,它显示所有用户的帖子,同时也显示该帖子的图像。图像是要发布的外键。以下是模型:

    型号.py

      class Post(models.Model):
            user            = models.ForeignKey(User, on_delete=models.CASCADE)
            status          = models.CharField(max_length=200)
    
    
        class Image(models.Model):
            post        = models.ForeignKey(Post, on_delete=models.CASCADE)
            img         = models.CharField(max_length=120)
            views_count = models.IntegerField(default=0)
    

    视图.py

    class GetPosts(ListAPIView):
        serializer_class = PostSerializer
    
        def get_queryset(self):
            requested_user = get_requested_user(self)
            return Post.objects.filter(user=requested_user).order_by('-created_at')
    
    def get_requested_user(self):
        filter_kwargs = {'username': self.kwargs['username']}
        return get_object_or_404(User.objects.all(), **filter_kwargs)
    

    序列化程序.py

    class PostSerializer(serializers.ModelSerializer):
        image_img = serializers.RelatedField(source='Image', read_only=True)
        class Meta:
            model = Post
            fields = ('status', 'image_img ')
    

    在序列化程序.py,我想展示一下 图像的字段( img, views_count )我现在的代码是这样的:

    {
        "count": 1,
        "next": null,
        "previous": null,
        "results": [
            {
                "status": "I am number 1"
            }
        ]
    }
    

    它包含用户的帖子,但不包含用户的帖子和每个帖子的图像。注意:查询url如下所示:/api/posts/user/

    1 回复  |  直到 6 年前
        1
  •  1
  •   JPG    6 年前

    你应该使用 在这里,

    class ImageSerializer(serializers.ModelSerializer):
        class Meta:
            model = Image
            fields = ('img',)
    
    
    class PostSerializer(serializers.ModelSerializer):
        image_img = ImageSerializer(source='image_set', many=True)
    
        class Meta:
            model = Post
            fields = '__all__'



    因此反应会是,

    {
        "count": 1,
        "next": null,
        "previous": null,
        "results": [
            {
                "status": "I am number 1",
                "image_img": [
                    {"img": "image_url"},
                    {"img": "image_url"},
                    ....
                ]
            }
        ]
    }



    all 序列化程序中模型类的字段?

    doc ,

    fields '__all__' 表明 .



    参考
    DRF- Nested Realtions
    2 source argument
    三。 Specifying which fields to include