factory/apps/utils/serializers.py

40 lines
1.5 KiB
Python
Executable File

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)