drf系列-序列化

一 定義篇
目的: 用於獲取需求models序列化的字段,字段必須在modles對應表內進行定義
定義方式:

#定義class類
class (model_name)+Serializer(serializers.ModelSerializer): 
#自定義強制規範策略
serializers.DateTimeField(format=date_fmt, required=False, default_timezone=timezone(settings.TIME_ZONE)) #序列化日期格式
name = serializers.CharField(label='項目名稱', help_text='項目名稱', max_length=20, min_length=5,
error_messages={
'min_length': '項目名稱不能少於5位',
'max_length': '項目名稱不能超過20位'
}, validators=[UniqueValidator(queryset=Projects.objects.all(), message='項目名稱不能重複'),
is_contains_keyword])

#繼承模型和字段
class Meta:
model = DeployAudit #繼承model類型
fields = '__all__' #繼承model所有字段
#添加複雜判斷規則
def validate(self, attrs):
if 判斷條件:
raise serializers.ValidationError({'error': '錯誤'}, code='error')
attrs['object_flow'] = flow_obj
return attrs
須知:
1 ModelSerializer在Meta中設置fields字段,系統會自動進行映射,省去每個字段再寫一個field。
2 如果表單本身存在額外的輸入對象,但是這個輸入對象並不需要存入form裏,就必須重載validate進行編寫,比如輸入驗證碼。
如果需要比較複雜的驗證,也必須重載validate進行編寫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章