Browse Source

hadith collection serializer updated

master
Mohsen Taba 3 weeks ago
parent
commit
e22fab1bbc
  1. 115
      apps/hadis/serializers/serializers_admin.py

115
apps/hadis/serializers/serializers_admin.py

@ -10,6 +10,17 @@ from ..models import (
from .category import LocalizedField from .category import LocalizedField
class AbsoluteImageField(serializers.ImageField):
def to_representation(self, value):
if not value:
return None
request = self.context.get("request")
url = value.url if hasattr(value, "url") else str(value)
if request:
return request.build_absolute_uri(url)
return url
class AdminHadisCategorySerializer(serializers.ModelSerializer): class AdminHadisCategorySerializer(serializers.ModelSerializer):
sect_type = serializers.CharField(source='sect.sect_type', read_only=True) sect_type = serializers.CharField(source='sect.sect_type', read_only=True)
title = LocalizedField() title = LocalizedField()
@ -79,10 +90,50 @@ class HadisCollectionsField(serializers.PrimaryKeyRelatedField):
class AdminHadisCollectionSerializer(serializers.ModelSerializer): class AdminHadisCollectionSerializer(serializers.ModelSerializer):
title = serializers.JSONField() title = serializers.JSONField()
summary = serializers.JSONField() summary = serializers.JSONField()
thumbnail = AbsoluteImageField(required=False, allow_null=True)
remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False)
class Meta: class Meta:
model = HadisCollection model = HadisCollection
fields = ["id", "title", "slug", "summary", "display_position", "status", "order", "pin_top"]
fields = [
"id",
"title",
"slug",
"summary",
"status",
"pin_top",
"order",
"thumbnail",
"remove_thumbnail",
"created_at",
"updated_at",
]
read_only_fields = ["id", "created_at", "updated_at"]
def to_internal_value(self, data):
mutable_data = data.copy() if hasattr(data, "copy") else data
thumbnail = mutable_data.get("thumbnail") if hasattr(mutable_data, "get") else None
if thumbnail and hasattr(thumbnail, "read"):
compressed_bytes = maybe_compress_uploaded_file(thumbnail)
if compressed_bytes is not None:
mutable_data = mutable_data.copy() if hasattr(mutable_data, "copy") else mutable_data
mutable_data["thumbnail"] = SimpleUploadedFile(
name=getattr(thumbnail, "name", "image"),
content=compressed_bytes,
content_type=getattr(thumbnail, "content_type", None),
)
return super().to_internal_value(mutable_data)
def create(self, validated_data):
validated_data.pop("remove_thumbnail", False)
return super().create(validated_data)
def update(self, instance, validated_data):
remove_thumbnail = validated_data.pop("remove_thumbnail", False)
if remove_thumbnail and instance.thumbnail:
instance.thumbnail.delete(save=False)
instance.thumbnail = None
return super().update(instance, validated_data)
class AdminHadisDetailSerializer(serializers.ModelSerializer): class AdminHadisDetailSerializer(serializers.ModelSerializer):
@ -224,18 +275,6 @@ class AdminHadisInterpretationSerializer(serializers.ModelSerializer):
] ]
read_only_fields = ["id", "created_at", "updated_at"] read_only_fields = ["id", "created_at", "updated_at"]
class AbsoluteImageField(serializers.ImageField):
def to_representation(self, value):
if not value:
return None
request = self.context.get("request")
url = value.url if hasattr(value, "url") else str(value)
if request:
return request.build_absolute_uri(url)
return url
class AbsoluteFileField(serializers.FileField): class AbsoluteFileField(serializers.FileField):
def to_representation(self, value): def to_representation(self, value):
if not value: if not value:
@ -313,56 +352,6 @@ class AdminHadisCategoryArchiveSerializer(serializers.ModelSerializer):
instance.xmind_file = None instance.xmind_file = None
return super().update(instance, validated_data) return super().update(instance, validated_data)
class AdminHadisCollectionSerializer(serializers.ModelSerializer):
title = serializers.JSONField()
summary = serializers.JSONField()
thumbnail = AbsoluteImageField(required=False, allow_null=True)
remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False)
class Meta:
model = HadisCollection
fields = [
"id",
"title",
"slug",
"summary",
"status",
"pin_top",
"order",
"thumbnail",
"remove_thumbnail",
"created_at",
"updated_at",
]
read_only_fields = ["id", "created_at", "updated_at"]
def to_internal_value(self, data):
mutable_data = data.copy() if hasattr(data, "copy") else data
thumbnail = mutable_data.get("thumbnail") if hasattr(mutable_data, "get") else None
if thumbnail and hasattr(thumbnail, "read"):
compressed_bytes = maybe_compress_uploaded_file(thumbnail)
if compressed_bytes is not None:
mutable_data = mutable_data.copy() if hasattr(mutable_data, "copy") else mutable_data
mutable_data["thumbnail"] = SimpleUploadedFile(
name=getattr(thumbnail, "name", "image"),
content=compressed_bytes,
content_type=getattr(thumbnail, "content_type", None),
)
return super().to_internal_value(mutable_data)
def create(self, validated_data):
validated_data.pop("remove_thumbnail", False)
return super().create(validated_data)
def update(self, instance, validated_data):
remove_thumbnail = validated_data.pop("remove_thumbnail", False)
if remove_thumbnail and instance.thumbnail:
instance.thumbnail.delete(save=False)
instance.thumbnail = None
return super().update(instance, validated_data)
class AdminTransmitterReliabilitySerializer(serializers.ModelSerializer): class AdminTransmitterReliabilitySerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = TransmitterReliability model = TransmitterReliability

Loading…
Cancel
Save