如果需要序列化的資料中包含有其他關聯物件,則對關聯物件資料的序列化需要指明。
例如,在定義英雄資料的序列化器時,外來鍵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...