drf 序列化器

2021-10-01 09:35:04 字數 3066 閱讀 5897

序列化器 和 django中 的 form 和 modelform 有類似的地方 ,

因為 在 drf 中,沒有模板的概念,所以 序列化的主要作用

是對響應的資料做序列化的, 還可以對 接收到的資料做序列化

serializer 序列化 查詢的結果

queryset = user.objects.

all(

)serializer = userserializer(queryset, many=

true

)serializer.data

ps : 序列化類中,定義的屬性,只能比要序列化的模型 屬性 只能少, 不能多

serializer 接收引數

serializer = userserializer(data=request.data)

if serializer.is_valid():

...return response(..

.)return response(serializer.errors, status=status.http_400_bad_request)

serializer create 功能
class

userserializer

(serializers.serializer):.

..defcreate

(self, validation_data)

:return user.objects.create(

**validation_data)

serialzie update 功能
class

userserializer

(serializers.serializer):.

..defupdate

(self, instance, validation_data)

: queryset = user.objects.

filter

(pk=instance.pk)

queryset.update(

**validation_data)

return queryset[

0]

更新**或者參考官方示例

class

userserializer

(serializrs.modelserializer)

:class

meta

: model = user

fields =

['username'

,'password'

,'***'

]

或者

class

userserializer

(serializrs.modelserializer)

:class

meta

: model = user

fields =

"__all__"

ps: 該類在使用的時候,會產生乙個錯誤

hyperlinkedidentityfieldrequires the request in the serializer context.

addcontext=when instantiating the serializer.

hyperlinkedmodelserializer缺省會 將 主鍵 轉為 url

預設的轉換規則是 根據 pk 去查詢 view_name = 「模型名小寫-detail」 的檢視

要想覆蓋他的 預設行為 ,則可以 在 class meta 中,新增乙個 extra_kwargs

具體**如下:

class

userserializer

(hyperlinkedmodelserializer)

:class

meta

: model = user

fields =

"__all__"

extra_kwargs =

}

ps : 在 多的一方、序列化資料的時候,預設顯示一方的pk值

顯示關係屬性的指定的某個屬性

在 序列化器 中 ,覆蓋 關係屬性,使用 readonlyfield(source=「模型小寫.模型屬性」)

class

addressserializer

(serializers.modelserializer)

: user = serializers.readonlyfield(source=

"user.pk"

)class

meta:.

..

顯示關係屬性的指定的所有屬性
class

addressserializer

(serializers.modelserializer)

: user = userserializer(

)class

meta:.

..

顯示關係屬性的 用 位址來顯示
class

addressserializer

(serializers.modelserializer)

: user = hyperlinkedrelatedfield(view_name=

"user-detail"

, lookup_field=

"pk"

, read_only=

true

)class

meta:.

..

hyperlinkedrelatedfield: 根據關係屬性對應的id進行資料的查詢

hyperlinkedidentityfield: 根據序列化類對應的模型的主鍵進行查詢

hyperlinkedrelatedfield/hyperlinkedidentityfield常見的屬性有:

drf 序列化器

models.pyclass chargepolicydetail models.model purpose c models.apartment.purpose category c models.apartment.category name models.charfield max lengt...

drf之序列化器

1.drf框架定義的序列化流程 1.狹義上的序列化定義 資料流向 後端到前段 後端負責處理資料處理流程 模型類物件 字典 json字串 drf約定的序列化流程 1.通過django模型類獲取資料庫資料構建模型類物件 2.把模型類物件轉化為字典 3.把字典轉化為json格式的字串 2.drf框架的反序...

drf 中的序列化器

序列化器 和 django中 的 form 和 modelform 有類似的地方 因為 在 drf 中,沒有模板的概念,所以 序列化的主要作用 是對響應的資料做序列化的,還可以對 接收到的資料做序列化 serializer 序列化 查詢的結果queryset user.objects.all ser...