我搞乱了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')
答案 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')