2015-05-09 34 views
3

我想列出Django其餘框架序列化器中單個項目的所有圖像。
在Django Rest框架序列化器中包含一個嵌套元素

在車型:

class Item(TimeStampedModel, AbsoluteUrlMixin, ObjectReviewsMixin): 
    ... 

class ItemImage(models.Model): 
    item = models.ForeignKey(Item, related_name='pictures') 
    picture = models.ImageField(null=True, blank=True, upload_to="items") 
在視圖集中

class ItemImageViewSet(viewsets.ModelViewSet): 
    queryset = ItemImage.objects.all() 
    serializer_class = ItemSerializer() 

在串行:

class ItemImageSerializer(serializers.Serializer): 
    class Meta: 
     model = ItemImage 
     fields =(
      'picture' 
     ) 


class ItemSerializer(ObjectReviewsSerializer): 
    pictures = ItemImageSerializer() 
    ... 

當我到/items/1我有現場圖片 空響應像"pictures":{}雖然它應該返回圖像列表。

回答

2

您在ImageSerializer上包含pictures字段,但您並未告訴Django REST框架它可以接受多個值。

初始化它

class ItemImageSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = ItemImage 
     fields =(
      'picture', 
     ) 


class ItemSerializer(ObjectReviewsSerializer): 
    pictures = ItemImageSerializer(many=True) 
    ... 

時,您應該通過many=True進入該領域,爲什麼它沒有被觸發錯誤的原因是因爲你的元組'picture'後失蹤的逗號。強烈建議始終包含尾隨逗號,否則將分割單值元組。所以你的領域真的是('p', 'i', 'c', 't', 'u', 'r', 'e',)這顯然不是你想要的。

另一個原因是因爲您使用的是Serializer,如ModelSerializer,所以實際上沒有生成字段。 Django REST框架將忽略Meta.fields中包含的實際上未定義的任何字段,這就是爲什麼您總是得到空白對象的原因。

我在修改後的代碼中包含了逗號,以及將您的序列化程序更改爲ModelSerializer

+0

它給出了正確的數字,但仍然是空的:'圖片':[{},{},{}]' – Sekai

+0

@Sekai剛剛編輯它以在你的'字段'元組中包含缺失的逗號 –

+0

相同的響應。如果可能的話,我會確認你的看法,如果我做得對, – Sekai

相關問題