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)