【问题标题】:DRF get only the first serialized instance for list view?DRF 只获取列表视图的第一个序列化实例?
【发布时间】:2020-03-11 19:05:22
【问题描述】:

我正在开发一个房地产应用程序,并希望列表仅显示列表的第一张图片。目前它正在显示所有图像。

class Image(models.Model):
    photo = models.ImageField(blank=True, upload_to=get_image_filename)
    listing = models.ForeignKey(Listing, on_delete=models.CASCADE)


class ImageSerializerForListingList(serializers.ModelSerializer):
    photo = serializers.ImageField()

    class Meta:
        model = Image
        fields = ('photo', )


class ListingListSerializer(serializers.HyperlinkedModelSerializer):
    image = ImageSerializerForListingList(many=True, required=False, source='image_set')

    class Meta:
        model = Listing
        fields = ('url', 'address', 'image', )

    def get_first_image(self, obj):
        image = obj.image_set.all().first()
        return ImageSerializerForListingList(image, many=True).data

这仍然显示所有图像,

对此有何建议?

【问题讨论】:

  • 只需在视图中使用过滤器并仅序列化一个对象。给我看你的模型和视图,我会试着写解决方案。

标签: django django-rest-framework django-rest-viewsets


【解决方案1】:

解决方案

“虽然您在 ListingListSerializer 上定义了 get_first_image 方法,但您并没有在任何地方使用它。

只有在序列化器上定义了相应的 SerializerMethodField 时,才会隐式使用序列化器上定义的方法。"

class ListingListSerializer(serializers.HyperlinkedModelSerializer):
    first_image = serializers.SerializerMethodField()

    class Meta:
        model = Listing
        fields = ('url', 'address', 'first_image', )

    """Much like our web app our listing view should only show one Image"""

    def get_first_image(self, obj):
        image = obj.image_set.first()
        return FirstImageSerializer(image).data

【讨论】:

    猜你喜欢
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 2020-03-01
    • 2010-12-01
    • 2016-02-09
    • 2012-08-18
    • 1970-01-01
    相关资源
    最近更新 更多