from rest_framework import serializers from django_restql.mixins import DynamicFieldsMixin from rest_framework.fields import empty from rest_framework.request import Request class PkSerializer(serializers.Serializer): pks = serializers.ListField(child=serializers.CharField(max_length=20), label="主键ID列表") class GenSignatureSerializer(serializers.Serializer): path = serializers.CharField(label="图片地址") class CustomModelSerializer(DynamicFieldsMixin, serializers.ModelSerializer): """ 自定义serializer/包含创建和新增字段处理 """ def __init__(self, instance=None, data=empty, request=None, **kwargs): super().__init__(instance, data, **kwargs) self.request: Request = request or self.context.get('request', None) def create(self, validated_data): if self.request: if getattr(self.request, 'user', None): validated_data['create_by'] = self.request.user if 'belong_dept' in validated_data: pass elif getattr(self.request.user, 'belong_dept', None): if hasattr(self.Meta.model, 'belong_dept'): validated_data['belong_dept'] = self.request.user.belong_dept return super().create(validated_data) def update(self, instance, validated_data): if self.request: if hasattr(instance, 'update_by'): validated_data['update_by'] = getattr(self.request, 'user', None) return super().update(instance, validated_data)