Django中序列化器的使用技巧

2021-10-08 02:20:15 字數 4253 閱讀 7618

進行資料的校驗

對資料物件進行轉換

class bookinfoserializer(serializers.serializer):

"""圖書資料序列化器"""

id = serializers.integerfield(label='id', read_only=true)

btitle = serializers.charfield(label='名稱', max_length=20)

bpub_date = serializers.datefield(label='發布日期', required=false)

bread = serializers.integerfield(label='閱讀量', required=false)

image = serializers.imagefield(label='', required=false)

class meta:

model = bookinfo

fields ='__all__'

字段

字段構造方式

booleanfield

booleanfield()

nullbooleanfield

nullbooleanfield()

charfield

charfield(max_length=none, min_length=none, allow_blank=false, trim_whitespace=true)

uuidfield

uuidfield(format=『hex_verbose』)

ipaddressfield

ipaddressfield(protocol=『both』, unpack_ipv4=false, **options)

integerfield

integerfield(max_value=none, min_value=none)

floatfield

floatfield(max_value=none, min_value=none)

decimalfield

decimalfield(max_digits, decimal_places, coerce_to_string=none, max_value=none, min_value=none)

datetimefield

datetimefield(format=api_settings.datetime_format, input_formats=none)

datefield

datefield(format=api_settings.date_format, input_formats=none)

filefield

filefield(max_length=none, allow_empty_file=false, use_url=uploaded_files_use_url)

imagefield

imagefield(max_length=none, allow_empty_file=false, use_url=uploaded_files_use_url)

引數名稱

作用max_length

最大長度

min_length

最小長度

allow_blank

是否允許為空

trim_whitespace

是否截斷空白字元

max_value

最小值min_value

最大值

引數名稱

說明read_only

表明該字段僅用於序列化輸出,預設false

write_only

表明該字段僅用於反序列化輸入,預設false

required

表明該字段在反序列化時必須輸入,預設true

default

反序列化時使用的預設值

allow_null

表明該欄位是否允許傳入none,預設false

validators

該欄位使用的驗證器

error_messages

包含錯誤編號與錯誤資訊的字典

label

用於html展示api頁面時,顯示的欄位名稱

help_text

用於html展示api頁面時,顯示的字段幫助提示資訊

表結構

序列化器**:

class assetserializer(serializers.modelserializer):

location_detail__name = serializer.charfield(source='location_detail.name',read_only=true)

location_detail_-room__name = serializer.charfield(source='location_detail.room.name',read_only=true)

location_detail__room__building__name = serializer.charfield(source='location_detail.room.building.name',read_only=true)

location_detail__room__building__region__name = serializer.charfield(source='location_detail.room.buidling.region.name',read_only=true)

class meta:

model = asset

fields = '__all__'

總結表結構
class deviceonservice(models.model):

on_service_type_choices = (

('0','普通裝置上線'),

('1','普通裝置上線'),

('2','普通裝置上線'),

)update_time = models.datetimefield(null=true,blacnk=true,verbose_name='購買時間')

序列化器**
class deviceonserviceserializer(serializer.modelserializer):

on_service_type__display_name = serializers.choicefield(choices=deviceonservice.on_service_type_choices,source='get_on_service_type_display',read_only=true)

# 時間型別,傳給前端時,也需要特殊處理,規定顯示格式。

update_time = serializers.datetimefield(format('%y-%m-%d %h:%m:%s'),required=false,allow_null=true)

總結表結構
class role(models.model):

name = models.charfield(max_length=128,verbose_name='角色',default='guest')

info = models.charfield(max_length=128,verbose_name='說明',default='請輸入角色說明')

class meta:

verbose_name = '角色'

verbose_name_plural = verbose_name

序列化器**
class roledisplayserializer(serializers.modelserializer):

key = serializers.intergerfield(source='id',read_only=true)

label = serializers.serializermethodfield()

class meta:

model = role

fields = ('key','label')

def get_label(self, obj):

return '{}({})'.format(obj.name,obj.info)

總結

django的序列化

關於django的序列化主要應用在將資料庫中檢索的資料返回給客戶端使用者,特別的ajax請求一般返回的json格式 兩種方法 缺點就是只能應用於物件 ret models.book.objects.filter con print ret queryset,物件 就是上面是列表 from djang...

Django的序列化

關於django中的序列化主要應用在將資料庫中檢索的資料返回給客戶端使用者,特別的ajax請求一般返回的為json格式。1 serializers,django內建 from django.core import serializers ret models.booktype.objects.all...

Django序列化與反序列化

新建乙個模型類 class userinfo models.model name models.charfield max length 20 password models.charfield max length 11 addkey models.foreignkey addressinfo c...