【问题标题】:Django rest framrwork Nested Serializer's fields not appearing in parent serializerDjango rest框架嵌套序列化器字段未出现在父序列化器中
【发布时间】:2019-09-13 11:54:48
【问题描述】:

在我的 Django 应用程序(使用 drf)中,我修改了模型的序列化程序以获取前端所需的输入,但尝试将此序列化程序嵌套在另一个序列化程序中的运气为零。

我尝试使用 to_representation 方法创建模型的一个字段并放置一个 get_photos 方法,但都没有任何意义。

# models.py

class Photo(models.Model):
    photo = models.OneToOneField(RawPhoto, related_name='contest_photo', on_delete=models.CASCADE)
    thumbnail_size = models.OneToOneField(PhotoSize, related_name='contest_photo', on_delete=models.CASCADE)
    thumbnail_url = models.TextField(verbose_name='thumbnail_url')

    class Meta:
        verbose_name = 'Contest Photo'

    @property
    def get_photo_src(self):
        return settings.MEDIA_URL + self.photo.image.name

    @property
    def get_thumbnail_url(self):
        # dont forget to add cache
        if len(self.thumbnail_url) == 0:
            file_name = self.get_photo_src
            last_dot = file_name.rfind('.')
            photo_name, photo_extension = file_name[:last_dot], file_name[last_dot:]
            self.thumbnail_url = photo_name + '_' + self.thumbnail_size.name + photo_extension

        return self.thumbnail_url

# serializers.py

class PhotoSerializer(serializers.ModelSerializer):
    thumbnail_height = serializers.ReadOnlyField(source='thumbnail_size.height')
    thumbnail_width = serializers.ReadOnlyField(source='thumbnail_size.width')
    src = serializers.ReadOnlyField(source='get_photo_src')
    thumbnail_url = serializers.ReadOnlyField(source='get_thumbnail_url')
    caption = serializers.ReadOnlyField(source='photo.caption')
    class Meta:
        model = Photo
        fields = ['src', 'thumbnail_url', 'thumbnail_height', 'thumbnail_width', 'caption']

class GallerySerializer(serializers.ModelSerializer):
    photos = PhotoSerializer(many=True)
    class Meta:
        model = Gallery
        fields = ['title', 'photos']

PhotoSerializer 实际上返回了我期望的对象的完整描述,但是当我将它嵌套在 GallerySerializer 中时,它只显示 thumbnail_url,这是模型本身中包含的唯一字段。 无论如何我可以在 GallerySerializer 中包含 PhotoSerializer 的字段吗? (应该是照片列表)

谢谢。

【问题讨论】:

  • GallerySerializerclass Meta下添加depth=1

标签: django django-rest-framework


【解决方案1】:

按照here 的描述使用深度参数

class GallerySerializer(serializers.ModelSerializer):
    photos = PhotoSerializer(many=True)
    class Meta:
        depth=1
        model = Gallery
        fields = ['title', 'photos']

【讨论】:

  • 我做到了,但这并没有什么不同。 api/photos/1 给出: { "src": "/images/blah.png", "thumbnail_url": "/images/blah_thumbnail.png", "thumbnail_height": 300, "thumbnail_width": 400, "caption": "123" } api/galleries/1 给出:{ "title": "test", "photos": [ { "thumbnail_url": "/images/blah_thumbnail.png" } ] }
猜你喜欢
  • 2018-12-13
  • 1970-01-01
  • 2017-11-15
  • 2016-08-01
  • 2014-07-26
  • 2016-10-01
  • 2021-06-23
  • 2014-11-30
  • 1970-01-01
相关资源
最近更新 更多