2015-06-20 71 views
1

Django的REST框架的HyperlinkedRelatedField用來序列相關領域是這樣的:Rest框架:HyperlinkedRelatedField,返回多個屬性?

'tracks': [ 
    'http://www.example.com/api/tracks/45/', 
    'http://www.example.com/api/tracks/46/', 
    'http://www.example.com/api/tracks/47/' 
] 

我正在尋找一種方式來返回多個屬性,是這樣的:

'tracks': [ 
    {'id': 45, 'href': 'http://www.example.com/api/tracks/45/'}, 
    {'id': 46, 'href': 'http://www.example.com/api/tracks/46/'}, 
    {'id': 47, 'href': 'http://www.example.com/api/tracks/47/'} 
] 

有沒有辦法實現這使用DRF的標準串行器?

回答

2

你會使用嵌套的序列化程序。在DRF所有串行器也可用作字段:

class TrackSerializer(ModelSerializer): 
    class Meta: 
     model = Track 
     fields = ('id', 'href') 

class YourModelSerializer(ModelSerializer): 
    tracks = TrackSerializer(many=True) 

你必須在official documentation例子,非常接近的方式。

如果您希望在tracks字段中具有讀寫訪問權限,則必須覆蓋create()update(),YourModelSerializer。這是因爲正確的行爲取決於您的特定應用程序:是否應該更新曲目的字段?它應該取代相關的曲目嗎?如果是這樣,它應該刪除那些相關聯的東西嗎?如果某些曲目不存在,應該創建它們還是返回錯誤?

documentation for this真的很徹底。

+0

必須是盲人,爲什麼我會閱讀文檔中的*下一個*部分... :)謝謝一堆! – Geotob