from rest_framework import serializers from django.urls import reverse from misago.categories.serializers import CategorySerializer from misago.core.serializers import MutableFields from misago.threads.models import Post from misago.users.serializers import UserSerializer from .post import PostSerializer __all__ = [ 'FeedSerializer', ] FeedUserSerializer = UserSerializer.subset_fields( 'id', 'username', 'avatars', 'absolute_url') FeedCategorySerializer = CategorySerializer.subset_fields( 'name', 'css_class', 'absolute_url') class FeedSerializer(PostSerializer, MutableFields): poster = FeedUserSerializer(many=False, read_only=True) category = FeedCategorySerializer(many=False, read_only=True) thread = serializers.SerializerMethodField() top_category = serializers.SerializerMethodField() class Meta: model = Post fields = PostSerializer.Meta.fields + [ 'category', 'thread', 'top_category' ] def get_thread(self, obj): return { 'title': obj.thread.title, 'url': obj.thread.get_absolute_url() } def get_top_category(self, obj): try: return FeedCategorySerializer(obj.top_category).data except AttributeError: return None