django 解決自定義序列化返回處理資料為null的問題
阿新 • • 發佈:2020-05-21
在介面返回資料時,如果資料庫表中查詢出來的某些欄位為null時,在前端需要多處理一些資料異常的情況。
django可以自定義序列化返回處理,將返回的內容限制和預處理再返回到前端。
1.未處理時返回
如圖上,有email、mobile這兩個欄位是有可以為空且預設值為null的。
2.to_representation處理
在模型序列化類增加,to_representation方法,以自定義資料處理限制
from rest_framework import serializers from .models import UserInfo class UserInfoSerializer(serializers.ModelSerializer): class Meta: model = UserInfo # fields = '__all__' fields = ( 'id','email','date_create','mobile','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.處理後前端獲取
補充知識:Django query查詢正常,返回物件為空QuerySet
我出現這個錯誤的前提條件:
資料為匯入的資料,並不是正常從前端新增入庫的。
問題現象:
views裡獲取資料庫查詢物件集合 obj= models.表名.objects.filter(**kwargs)
控制檯debug發現 obj為QuerySet<[]>
拿著query到資料庫裡執行sql ,還能查出資料,就是沒返回
解決問題:
檢視資料庫欄位是否符合models中定義的格式,如,是否有預設值,
將資料庫為空欄位修改成和models一樣的,有個快速比對的方法,從前端向資料庫新增一條資料,拿這個正式資料和匯入資料做比對,哪裡不一樣,修改哪裡即可。
以上這篇django 解決自定義序列化返回處理資料為null的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。