drf 中的序列化器

2021-10-01 07:26:46 字數 2736 閱讀 9378

序列化器 和 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):

...def create(self, validation_data):

return user.objects.create(**validation_data)

serialzie update 功能
class userserializer(serializers.serializer):

...def update(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 序列化器

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

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框架的反序...