一 定义篇
目的: 用于获取需求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进行编写