Django6—ModelSerializer 、create,update方法
create:
1、创建序列化器对象时,如果仅仅只传data参数
2、序列化器对象调用save方法时,会调用序列化器类中的create方法,进行数据创建操作
serializer = serializers.ProjectModelSerializer(data=python_data) serializer.save(user={'name': 'xx', 'age': 18}, score=100) return JsonResponse(serializer.data, json_dumps_params={"ensure_ascii": False})
update:
1、创建序列化器对象时,如果同时给data和instance传参数
2、序列化器对象调用save方法时,会调用序列化器类中的update方法,进行数据更新操作
serializer = serializers.ProjectSerilizer(instance=self.get_object(pk), data=python_data) return JsonResponse(serializer.data, json_dumps_params={"ensure_ascii": False}, status=201)
ModelSerializer
1、可以继承ModelSerializer,根据模型类来自动生成序列化器类中的字段
2、必须得指定model参数(模型类),用于指定使用的模型
3、会实现create、update方法
4、会给主键字段、DataTimeField(指定auto_now_add和auto_now参数),会添加read_only=True
5、会给有指定default参数的字段,添加required=False
6、会给有指定null参数的字段,添加allow_null=True
7、会给有指定blank参数的字段,添加allow_blank=True
class ProjectModelSerializer(serializers.ModelSerializer): """ 1、可以继承ModelSerializer,根据模型类来自动生成序列化器类中的字段 2、必须得指定model参数(模型类),用于指定使用的模型 3、会实现create、update方法 4、会给主键字段、DataTimeField(指定auto_now_add和auto_now参数),会添加read_only=True 5、会给有指定default参数的字段,添加required=False 6、会给有指定null参数的字段,添加allow_null=True 7、会给有指定blank参数的字段,添加allow_blank=True """ # 方式一: # a.可以重新定义模型类中的字段 # b.重新定义的字段会覆盖自动生成的同名字段 # name = serializers.CharField(label='项目名称', help_text='项目名称', max_length=10, min_length=3, # error_messages={'min_length': '项目名称不能少于3位', 'max_length': '项目名称不能超过10位'}, # validators=[ # UniqueValidator(queryset=Projects.objects.all(), message='项目名不能重复'), # is_contain_keyword # ]) # 可以将自定义的一个序列化器类作为另一个序列化器类中的字段 interfaces = OneInterfaceSerilizer(label='所属接口信息', help_text='所属接口信息', read_only=True, many=True) # token = serializers.CharField(read_only=True) # email = serializers.EmailField(write_only=True) class Meta: model = Projects # 8、fields指定模型类中需要进行序列化操作的字段 # a.'__all__',指定模型类中所有的字段都需要进行序列化操作 # b.可以指定模型类中序列化操作的字段,需要在元组中指定 # c.exclude指定不需要进行序列化操作的字段 # d.如果指定了模型类中没有定义的字段,那么必须在fields元组中指定,如果fields为'__all__'或者exclude除外 # fields = '__all__' # fields = ('id', 'name', 'leader', 'is_execute') fields = ('id', 'name', 'leader', 'is_execute', 'interfaces', 'token', 'email') # exclude = ('create_time', 'update_time', 'is_execute') # 可以在Meta内部类的read_only_fields,统一指定需要添加read_only=True的字段 read_only_fields = ('is_execute', 'desc', 'id') # 方式二: # a.可以在Meta内部类的extra_kwargs中对自动生成的序列化字段进行修改 # b.将需要修改的字段名作为key,具体修改的内容作为value extra_kwargs = { 'name': { 'label': '项目名称', 'max_length': 10, 'min_length': 3, 'error_messages': { 'min_length': '项目名称不能少于3位', 'max_length': '项目名称不能超过10位' }, 'validators': [ UniqueValidator(queryset=Projects.objects.all(), message='项目名不能重复'), is_contain_keyword ], 'write_only': True } } def create(self, validated_data): user = validated_data.pop('user') score = validated_data.pop('score') return super().create(validated_data)