Rest Framework 關聯物件巢狀序列化

2021-09-18 09:08:00 字數 1710 閱讀 1841

如果需要序列化的資料中包含有其他關聯物件,則對關聯物件資料的序列化需要指明。
例如,在定義英雄資料的序列化器時,外來鍵type(即所屬的分類)字段如何序列化?

對於關聯字段,可以採用以下幾種方式:

此字段將被序列化為關聯物件的主鍵。

type = serializers.primarykeyrelatedfield(label=『分類』, read_only=true)

或type = serializers.primarykeyrelatedfield(label=『分類』, queryset=bookinfo.objects.all())

指明欄位時需要包含read_only=true或者queryset引數:

•包含read_only=true引數時,該字段將不能用作反序列化使用

•包含queryset引數時,將被用作反序列化時引數校驗使用

此字段將被序列化為關聯物件的字串表示方式(即__str__方法的返回值)

type = serializers.stringrelatedfield(label=『分類』)

此字段將被序列化為關聯物件的指定字段資料

type = serializers.slugrelatedfield(label=『分類』, read_only=true, slug_field=『bpub_date』)

slug_field指明使用關聯物件的哪個字段

hbook = bookinfoserializer()

此字段只可以用get方法

序列化器的每個字段實際都是由該字段型別的to_representation方法決定格式的,可以通過重寫該方法來決定格式。

注意,to_representations方法不僅侷限在控制關聯物件格式上,適用於各個序列化器欄位型別。

定義乙個新的關聯字段:

class typerelatefield(serializers.relatedfield):

「」「自定義用於處理分類的字段」""

def to_representation(self, value):

return 『book: %d %s』 % (value.id, value.btitle)

指明type為typerelatefield型別

type = typerelatefield(read_only=true)

可以用於使用超連結表示關係的目標

例如,以下序列化程式:

class albumserializer(serializers.modelserializer):

tracks = serializers.hyperlinkedrelatedfield(

many=true,

read_only=true,

view_name=『track-detail』

)

class meta:

model = album

fields = ('album_name', 'artist', 'tracks')

將序列化為這樣的表示:

預設情況下,此字段是讀寫的,但您可以使用該read_only標誌更改此行為。

如果關聯的物件資料不是只有乙個,而是包含多個資料,如想序列化分類typeinfo資料,每個typeinfo物件關聯的商品goodinfo物件可能有多個,此時關聯字段型別的指明仍可使用上述幾種方式,只是在宣告關聯欄位時,多補充乙個many=true引數即可。

學習週報 rest framework

本週學習情況 1.rest framework的學習 2.前後端分離5 2到5 6 下週學習計畫 停止課程內容學習 2.花10學習rest framework基礎的學習 本週完成情況 一 fbv,cbv 繼承 避免重複 1 優先順序從左往右 2 super 1.先在studentsview裡面查詢,...

rest framework登入認證

class user models.model user models.charfield max length 32 pwd models.charfield max length 32 class usertoken models.model token models.charfield max...

REST framework 渲染模組

根據 使用者請求url 或 使用者可接受的型別,篩選出合適的 渲染元件。頁面 postman from rest framework.renderers import jsonrenderer from rest framework.renderers import browsableapirend...