【问题标题】:In Django Rest Framework, how do I serialize values to an arraylist?在 Django Rest Framework 中,如何将值序列化为数组列表?
【发布时间】:2015-12-04 03:17:19
【问题描述】:

在 Django Rest Framework 3.0+ 中,我想得到这个值:

{
  image:[img1,img2,img3]
}

我的代码如下:

models.py

class UserDynamic(models.Model):

    """User dynamic"""
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    content = models.TextField(max_length=200)
    createtime = models.DateTimeField(auto_now_add=True)


class UserDynamicImage(models.Model):

    """User dynamic images"""
    userdynamic = models.ForeignKey(UserDynamic)
    image = models.ImageField(upload_to='UserDynamicImage/')

序列化器.py

class UserDynamicImageSerializer(serializers.ModelSerializer):  
    def to_representation(self, obj):
        return obj.image

class UserDynamicSerializer(serializers.ModelSerializer):

    user = UserProfileSerializer()
    imgs = serializers.SerializerMethodField('GetImage')
    # imgs = serializers.ListField(img = serializers.ImageField())
    # imgs = UserDynamicImageSerializer(many=True, read_only=True)

    class Meta:
        model = UserDynamic
        fields = ('id', 'user', 'content', 'imgs', 'createtime')

    def GetImage(self,UserDynamic):
        entity = UserDynamicImage.objects.filter(userdynamic = UserDynamic)
        return UserDynamicImageSerializer(entity,many=True,context={"request": self.context['request']}).data

现在,它返回一个错误: 不是 JSON 可序列化的

【问题讨论】:

    标签: json django django-rest-framework


    【解决方案1】:

    在您的UserDynamicImageSerializer 中,而不是返回obj.image,而是返回obj.image.url

    你可以这样做:

    class UserDynamicImageSerializer(serializers.ModelSerializer):  
        def to_representation(self, obj):
            if obj.image:
                return obj.image.url
    

    不使用UserDynamicImageSerializer的另一种方法:

    class UserDynamicSerializer(serializers.ModelSerializer):
    
        user = UserProfileSerializer()
        imgs = serializers.SerializerMethodField('GetImage')
    
        class Meta:
            model = UserDynamic
            fields = ('id', 'user', 'content', 'imgs', 'createtime')
    
        def GetImage(self,UserDynamic):
            entity = UserDynamicImage.objects.filter(userdynamic=UserDynamic).values_list('image',flat=True)
            return entity
    

    【讨论】:

    • 对不起,抛出一个错误:child 是一个必需的参数。我添加 chind arg。它抛出:'Store_Rotation' 对象不可迭代。
    猜你喜欢
    • 1970-01-01
    • 2013-11-17
    • 2015-03-15
    • 1970-01-01
    • 2013-05-23
    • 2021-04-19
    • 2015-06-11
    • 2020-07-23
    • 1970-01-01
    相关资源
    最近更新 更多