【问题标题】:django serializer thumbnail of ImageField using sorl使用 sorl 的 ImageField 的 django 序列化程序缩略图
【发布时间】:2018-09-16 16:40:27
【问题描述】:

我有一个现有的序列化程序,其中包括一个可以是非常大的图像的 ImageField。我想要该图像的较小缩略图版本。 我正在尝试使用 sorl 创建缩略图,因为它能够将其上传到 AWS S3。如何在序列化程序中创建此缩略图?

在我当前的 serializers.py 中:

class EmployeeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Employee
        fields = ("id", 
                    "username", 
                    "first_name",
                    "last_name",
                    "face_image",)

我的模型看起来像这样,它上传到 AWS S3:

class Employee(models.Model):
    username = models.CharField(max_length=30, blank=False)
    first_name = models.CharField(max_length=30, blank=False)
    last_name = models.CharField(max_length=30, blank=False)   
    face_image = models.ImageField(upload_to=upload_to('employee/face_image/'), blank=True, null=True, storage=MediaStorage())

这是尝试在序列化程序中添加一个名为“face_image_small”的新字段,但它不起作用

  from sorl.thumbnail import get_thumbnail
  class EmployeeSerializer(serializers.ModelSerializer):
        class Meta:
            model = Employee
            fields = ("id", 
                        "username", 
                        "first_name",
                        "last_name",
                        "face_image",
                        "face_image_small",)

        face_image_small = get_thumbnail(self.face_image, '200x200', crop='center', quality=99)

【问题讨论】:

  • 我已经有一段时间没有使用它了,但我回家时会检查一下。我想我在某处有一些代码
  • 我刚上车检查了一下,但我已经没有了...对不起:/我得看看我是否能记得我做了什么,但我隐约记得做过类似的东西......特别是我必须尽快为我目前的项目做这件事,哈哈

标签: django amazon-s3 serialization sorl-thumbnail


【解决方案1】:

这是我的解决方法:

  from sorl.thumbnail import get_thumbnail
  class EmployeeSerializer(serializers.ModelSerializer):
        class Meta:
            model = Employee
            fields = ("id", 
                        "username", 
                        "first_name",
                        "last_name",
                        "face_image",
                        "face_image_small",)

    face_image_small = serializers.SerializerMethodField()

    def get_face_image_small(self, obj):

        return face_image_small = get_thumbnail(self.face_image, '200x200', crop='center', quality=99).url

【讨论】:

    猜你喜欢
    • 2013-11-17
    • 2011-01-11
    • 2014-10-04
    • 1970-01-01
    • 2014-08-21
    • 2016-05-10
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    相关资源
    最近更新 更多