django 解決自定義序列化返回處理數(shù)據(jù)為null的問(wèn)題
在接口返回?cái)?shù)據(jù)時(shí),如果數(shù)據(jù)庫(kù)表中查詢出來(lái)的某些字段為null時(shí),在前端需要多處理一些數(shù)據(jù)異常的情況。
django可以自定義序列化返回處理,將返回的內(nèi)容限制和預(yù)處理再返回到前端。
1.未處理時(shí)返回
如圖上,有email、mobile這兩個(gè)字段是有可以為空且默認(rèn)值為null的。
2.to_representation處理
在模型序列化類增加, to_representation方法,以自定義數(shù)據(jù)處理限制
from rest_framework import serializersfrom .models import UserInfoclass UserInfoSerializer(serializers.ModelSerializer): class Meta: model = UserInfo # fields = ’__all__’ fields = ( ’id’, ’email’, ’date_create’, ’mobile’, ’email’, ’notice_voice’, ’notice_email’, ’notice_sms’, ’notice_push’) def to_representation(self, instance): data = super().to_representation(instance) if not data[’email’]: data[’email’] = '' if not data[’mobile’]: data[’mobile’] = '' return data
3.處理后前端獲取
補(bǔ)充知識(shí):Django query查詢正常,返回對(duì)象為空QuerySet
我出現(xiàn)這個(gè)錯(cuò)誤的前提條件:
數(shù)據(jù)為導(dǎo)入的數(shù)據(jù),并不是正常從前端添加入庫(kù)的。
問(wèn)題現(xiàn)象:
views里獲取數(shù)據(jù)庫(kù)查詢對(duì)象集合 obj= models.表名.objects.filter(**kwargs)
控制臺(tái)debug發(fā)現(xiàn) obj為QuerySet<[]>
拿著query到數(shù)據(jù)庫(kù)里執(zhí)行sql ,還能查出數(shù)據(jù),就是沒(méi)返回
解決問(wèn)題:
查看數(shù)據(jù)庫(kù)字段是否符合models中定義的格式,如,是否有默認(rèn)值,
將數(shù)據(jù)庫(kù)為空字段修改成和models一樣的,有個(gè)快速比對(duì)的方法,從前端向數(shù)據(jù)庫(kù)添加一條數(shù)據(jù),拿這個(gè)正式數(shù)據(jù)和導(dǎo)入數(shù)據(jù)做比對(duì),哪里不一樣,修改哪里即可。
以上這篇django 解決自定義序列化返回處理數(shù)據(jù)為null的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. php讀取xml中某個(gè)元素的內(nèi)容(PHP5以上才支持)2. Java基于redis和mysql實(shí)現(xiàn)簡(jiǎn)單的秒殺(附demo)3. SpringBoot+SpringCache實(shí)現(xiàn)兩級(jí)緩存(Redis+Caffeine)4. Kotlin + Flow 實(shí)現(xiàn)Android 應(yīng)用初始化任務(wù)啟動(dòng)庫(kù)5. IDEA SpringBoot 項(xiàng)目配置Swagger2的詳細(xì)教程6. 快速解決ajax返回值給外部函數(shù)的問(wèn)題7. Java通俗易懂系列設(shè)計(jì)模式之模板模式8. jsp文件下載功能實(shí)現(xiàn)代碼9. AJAX實(shí)現(xiàn)省市縣三級(jí)聯(lián)動(dòng)效果10. ASP.NET MVC視圖頁(yè)使用jQuery傳遞異步數(shù)據(jù)的幾種方式詳解
