initial commit
This commit is contained in:
57
core/serializers/base.py
Normal file
57
core/serializers/base.py
Normal file
@@ -0,0 +1,57 @@
|
||||
from django.contrib.auth import get_user_model
|
||||
from drf_spectacular.utils import extend_schema_field
|
||||
from rest_framework import serializers
|
||||
|
||||
from core.serializers.mini import UserMiniSerializer
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
|
||||
class BaseModelSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
Base serializer for all models inheriting from BaseModel.
|
||||
Returns audit fields with a nested user mini representation.
|
||||
"""
|
||||
|
||||
id = serializers.UUIDField(read_only=True)
|
||||
created_by = UserMiniSerializer(read_only=True)
|
||||
updated_by = UserMiniSerializer(read_only=True)
|
||||
created_at = serializers.SerializerMethodField()
|
||||
updated_at = serializers.SerializerMethodField()
|
||||
can_delete = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = None
|
||||
fields = (
|
||||
"id",
|
||||
"created_by",
|
||||
"updated_by",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"can_delete",
|
||||
)
|
||||
read_only_fields = fields
|
||||
|
||||
def to_internal_value(self, data):
|
||||
if isinstance(data, dict):
|
||||
data = data.copy()
|
||||
for name, field in self.fields.items():
|
||||
if (
|
||||
name in data
|
||||
and data[name] is None
|
||||
and isinstance(field, (serializers.CharField, serializers.URLField))
|
||||
):
|
||||
data[name] = ""
|
||||
return super().to_internal_value(data)
|
||||
|
||||
@extend_schema_field(serializers.CharField)
|
||||
def get_created_at(self, obj) -> str:
|
||||
return obj.created_at_display
|
||||
|
||||
@extend_schema_field(serializers.CharField)
|
||||
def get_updated_at(self, obj) -> str:
|
||||
return obj.updated_at_display
|
||||
|
||||
@extend_schema_field(serializers.BooleanField)
|
||||
def get_can_delete(self, obj) -> bool:
|
||||
return bool(getattr(obj, "can_delete", False))
|
||||
Reference in New Issue
Block a user