1. 程式人生 > 程式設計 >django 解決自定義序列化返回處理資料為null的問題

django 解決自定義序列化返回處理資料為null的問題

在介面返回資料時,如果資料庫表中查詢出來的某些欄位為null時,在前端需要多處理一些資料異常的情況。

django可以自定義序列化返回處理,將返回的內容限制和預處理再返回到前端。

1.未處理時返回

django 解決自定義序列化返回處理資料為null的問題

如圖上,有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 解決自定義序列化返回處理資料為null的問題

補充知識:Django query查詢正常,返回物件為空QuerySet

我出現這個錯誤的前提條件:

資料為匯入的資料,並不是正常從前端新增入庫的。

問題現象:

views裡獲取資料庫查詢物件集合 obj= models.表名.objects.filter(**kwargs)

控制檯debug發現 obj為QuerySet<[]>

拿著query到資料庫裡執行sql ,還能查出資料,就是沒返回

解決問題:

檢視資料庫欄位是否符合models中定義的格式,如,是否有預設值,

django 解決自定義序列化返回處理資料為null的問題

django 解決自定義序列化返回處理資料為null的問題

將資料庫為空欄位修改成和models一樣的,有個快速比對的方法,從前端向資料庫新增一條資料,拿這個正式資料和匯入資料做比對,哪裡不一樣,修改哪裡即可。

以上這篇django 解決自定義序列化返回處理資料為null的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。