使用DRF从嵌套对象返回URL列表

时间:2016-04-20 02:46:12

标签: python django django-rest-framework

我搞乱了Django Rest Framework,我试图从角度JS复制“gem store”示例,以使其与DRF一起使用。

我有这个模型

# Create your models here.
class Gem(models.Model):

    name=models.CharField(max_length=200)
    price = models.FloatField()
    description = models.CharField(max_length=200)

    def __str__(self):
        return "{name} | {price}".format(name=self.name,price=self.price)



class GemGallery(models.Model):
    gem=models.ForeignKey(Gem,related_name="gallery")
    image=models.ImageField(upload_to=upload_path_handler)

不要担心upload_path_handler,它只是保留我的实体,然后我获取生成的ID来命名文件并将其保存在本地。

问题在于我的序列化程序,我正在尝试使用指向图像属性的“SlugRelatedField”,因为它应该返回一个url但是我得到了这个例外:

  / listGems /'ascii'编解码器中的 UnicodeDecodeError无法解码字节0xb4   位置25:序数不在范围内(128)

可能url有一个字符串序器不支持或我不知道。

所以我只想获得一个Gems列表,并在每个gem内部获取该对象附带的GemGallery集中的url列表。

这是我的序列化器:

class GemSerializer(serializers.ModelSerializer):
    gallery = serializers.SlugRelatedField(
        many=True,
        read_only=True,
        slug_field="image")
    class Meta:
        model = models.Gem
        fields = ('id', 'name','description','price','gallery')

1 个答案:

答案 0 :(得分:0)

我使用SerializerMethodfield

解决了这个问题
class GemSerializer(serializers.ModelSerializer):
    gallery = serializers.SerializerMethodField()
    def get_gallery(self,instance):
        images=[]
        for gallery in instance.gallery.all():
            images.append(gallery.image.url)
        return images

    class Meta:
        model = models.Gem
        fields = ('id', 'name','description','price','gallery')