序列化器 和 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: 該類在使用的時候,會產生乙個錯誤
hyperlinkedidentityfield
requires 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框架的反序...