Browse Source

book library create update

master
Mohsen Taba 7 hours ago
parent
commit
6fa5171639
  1. 53
      apps/library/serializers_admin.py

53
apps/library/serializers_admin.py

@ -145,6 +145,41 @@ class AdminBookListSerializer(serializers.ModelSerializer):
]
read_only_fields = ["id", "view_count", "download_count", "created_at", "updated_at"]
import json
class FlexibleJSONListField(serializers.Field):
def to_internal_value(self, data):
if data is None or data == "":
return []
if isinstance(data, list):
return data
if isinstance(data, str):
data = data.strip()
if not data:
return []
try:
parsed = json.loads(data)
if isinstance(parsed, list):
return parsed
return [parsed]
except (ValueError, json.JSONDecodeError):
return [item.strip() for item in data.split(",") if item.strip()]
return []
def to_representation(self, value):
if isinstance(value, list):
return value
if isinstance(value, str):
try:
parsed = json.loads(value)
if isinstance(parsed, list):
return parsed
except Exception:
pass
return [value] if value else []
return []
from dj_language.models import Language
class AdminBookDetailSerializer(serializers.ModelSerializer):
thumbnail = AbsoluteImageField(required=False, allow_null=True)
@ -157,6 +192,8 @@ class AdminBookDetailSerializer(serializers.ModelSerializer):
collections_detail = AdminLibraryCollectionSerializer(source="collections", many=True, read_only=True)
remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False)
remove_book_file = serializers.BooleanField(write_only=True, required=False, default=False)
main_themes = FlexibleJSONListField(required=False, default=list)
notable_works = FlexibleJSONListField(required=False, default=list)
language = serializers.SlugRelatedField(
slug_field='code',
queryset=Language.objects.all(),
@ -205,22 +242,6 @@ class AdminBookDetailSerializer(serializers.ModelSerializer):
]
read_only_fields = ["id", "view_count", "download_count", "bookmark_count", "created_at", "updated_at"]
def to_internal_value(self, data):
import json
if hasattr(data, "copy"):
mutable_data = data.copy()
else:
mutable_data = dict(data)
for json_field in ["main_themes", "notable_works"]:
val = mutable_data.get(json_field)
if isinstance(val, str):
try:
mutable_data[json_field] = json.loads(val)
except ValueError:
pass
return super().to_internal_value(mutable_data)
def get_bookmark_count(self, obj):
from apps.bookmark.models.bookmark import Bookmark
return Bookmark.objects.filter(service=Bookmark.ServiceChoices.LIBRARY, content_id=obj.id, status=True).count()

Loading…
Cancel
Save