日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于django—模型序列化器类详细内容

發布時間:2025/3/21 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于django—模型序列化器类详细内容 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、定義模型序列化器類

1、繼承serializers.ModelSerializer類或其子類

2、需要在Meta內部類中指定model、fields類屬性參數
3、model指定模型類(需要生成序列化器的模型類)
4、fields指定模型類中哪些字段需要自動生成序列化器字段
1)、如果指定為__all__,那么模型類中所有的字段需要自動轉化為序列化器字段
2)、如果將特定的字段轉化為序列化器字段,用元組表示

fields=(‘id’,‘name’,‘leader’,‘interfaces_set’,‘token’)
3)、exclude指定模型類中哪些字段不需要設置為序列化器字段,其他的字段需要轉化
exclude=(‘create_time’,‘update_time’)

5、會給id主鍵、有指定auto_new或者auto_add_now參數DateTimeField字段,添加read_only=True
6、有設置unique=True的模型字段,會自動在validators列表中添加唯一約束校驗UniqueValidator
7、如果有設置default=True的模型字段,會自動添加required=True
8、有設置null=True的模型字段,會自動添加allow=True
9、有設置blank=True的模型字段,會自動添加allow_blank=True

二、修改自動生成的序列化器字段

方式一:
a、可以重新定義模型類中同名的字段
b、自定義字段的優先級會更高(會覆蓋自動生成的序列化器字段)
c、fields元組中必須指定進行序列化或者反序列化操作的所有字段名稱。指定了’all’和exclude除外
方式二
a、如果自動生成的序列化器字段,只有少量不滿足要求,可以在Meta中extra_kwargs字典進行微調
b、將需要調整的字段作為key,把具體需要修改的內容作為value

例如:

c、可以將需要批量設置read_only參數的字段名添加到Meta中的read_only_fields元組
read_only_fields=(‘leader’,‘is_execute’,‘id’)

三、視圖中運用模型序列化器類

1、導入ProjectModelSerializer

2、創建數據時,報錯誤
raise TypeError("%s() got an unexpected keyword argument ‘%s’" % (cls.name, kwarg))
TypeError: Projects() got an unexpected keyword argument ‘myname’

原因:當save()方法中傳遞有參數時,校驗通過后會將myname參數添加到validated_data字典中,當調用save方法后,會執行create方法創建數據,但是模型類中沒有myname字段,所以報錯,要把這myname個參數刪掉,才能創建數據;
怎么做???
當前端傳入的數據檢驗通過后需要在模型序列化器類中將myname字段刪除,模型序列化器類中提供了create方法,但是父類提供的create方法不滿足要求,需要重寫create方法。
重寫的內容為:validated_data.pop(‘myname’)

3、繼承父類的create方法
a、繼承ModelSerializer之后,ModelSerializer中實現了create和update方法
b、一般無需再次定義create和update方法
c、如果父類提供的create和update方法不滿足需要時,可以重寫create和update方法,最后再調用父類的create和update方法

四、token的輸出

當設置token=serializers.CharField(read_only=True)時,
1、說明token只輸出,不需要進行輸入校驗,
2、當前端傳入的數據傳給data參數,經過is_valid()方法進行檢驗,校驗通過之后會返回validated_data參數(一般為字典),
3、之后執行save()方法,自動執行create方法,并將validated_data參數傳給create方法進行創建數據,而validated_data字典中不包含token,所以創建的模型類對象中不包含token的key,
4、創建的模型對象去和序列化模型類中的字段進行對比時,會忽略序列化模型類中的token字段,因此要在create中添加token
5、添加token一定要添加到創建模型對象之后,不然會報錯


利用postman,發送請求

五、一定要注意的是:

fields指定模型類中的字段和自定義的字段中那些需要自動生成序列化器字段

token在模型類中沒有定義,需要自定義token字段,如果fields中添加了token字段,而序列化器中沒有定義token序列化器字段,會報錯

總結

以上是生活随笔為你收集整理的关于django—模型序列化器类详细内容的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。