2016-04-20 8 views
0

私はDjango Rest Frameworkを使いこなしていますが、私はDRFで動作させるために、角度JSから "gem store"の例を複製しようとしています。入れ子オブジェクトからURLリストを返す

私はこのモデル

# 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) 

を持っているが、それはちょうど私のエンティティを永続化し、その後、私は、ファイルに名前を付け、それをローカルに保存するために生成されたIDを取得し、upload_path_handler心配しないでください。

問題は私のシリアライザであり、私はそれがURLを返すなければならないので、画像の属性を指す「SlugRelatedField」を使用しようとしているが、私はこの例外を取得:

UnicodeDecodeError /時/「ASCII」コーデックlistGemsは、位置25でバイト0xb4 をデコードすることはできません:ない範囲で序(128)

おそらくURLは、シリアライザがサポートしていないか、私にはわからないという文字を持っています。

私は宝石のリストを取得したいだけで、すべての宝石の中には、オブジェクトに付属する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

私は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') 
を使用して、それを解決しました
関連する問題