from rest_framework import serializers from django.utils.timezone import localtime from apps.archive.models import PostModel class PostListSerializer(serializers.Serializer): count = serializers.SerializerMethodField() posts = serializers.SerializerMethodField() class Meta: model = PostModel fields = ["count", "posts"] def get_count(self, obj): return obj.count() def get_posts(self, obj): return PostPreviewSerializer(obj.all(), many=True).data class PostPreviewSerializer(serializers.ModelSerializer): description = serializers.SerializerMethodField() date = serializers.SerializerMethodField() media = serializers.SerializerMethodField() source_site = serializers.SerializerMethodField() category = serializers.SerializerMethodField() creator = serializers.SerializerMethodField() tags = serializers.SerializerMethodField() class Meta: model = PostModel fields = [ "post_id", "mature", "title", "description", "source_site", "category", "creator", "date", "media", "tags", ] def get_description(self, obj): return obj.description.first().content def get_source_site(self, obj): return { "slug": obj.source_site.slug, "name": obj.source_site.name, } def get_category(self, obj): data = [] for i in obj.category.all(): data.append({"slug": i.slug, "name": i.name}) return data def get_creator(self, obj): avatar_url = None if obj.creator.avatar: avatar_url = obj.creator.avatar.file.url return { "slug": obj.creator.slug, "name": obj.creator.name, "avatar": avatar_url, } def get_date(self, obj): return { "created": localtime(obj.date_created).isoformat(), "imported": localtime(obj.date_imported).isoformat(), "last_import": localtime(obj.date_last_import).isoformat(), } def get_media(self, obj): data = [] for i in obj.files.all(): data.append({"type": i.mimetype, "src": i.file.url}) return data def get_tags(self, obj): return [tag.slug for tag in obj.tags.all()] class PostSerializer(serializers.ModelSerializer): source_site = serializers.SerializerMethodField() description = serializers.SerializerMethodField() creator = serializers.SerializerMethodField() tags = serializers.SerializerMethodField() date = serializers.SerializerMethodField() media = serializers.SerializerMethodField() class Meta: model = PostModel fields = [ "post_id", "title", "description", "source_site", "creator", "date", "mature", "media", "tags", ] def get_source_site(self, obj): return { "slug": obj.source_site.slug, "name": obj.source_site.name, } def get_description(self, obj): return { "count": obj.description.count(), "content": obj.description.first().content, } def get_creator(self, obj): return { "slug": obj.creator.slug, "name": obj.creator.name, # "source_site": { # "slug": obj.creator.source_site.slug, # "name": obj.creator.source_site.name, # }, } def get_tags(self, obj): return [tag.slug for tag in obj.tags.all()] def get_date(self, obj): return { "created": localtime(obj.date_created).isoformat(), "imported": localtime(obj.date_imported).isoformat(), "last_import": localtime(obj.date_last_import).isoformat(), } def get_media(self, obj): data = [] for i in obj.files.all(): data.append({"type": i.mimetype, "url": i.file.url}) return data