feed.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from rest_framework import serializers
  2. from misago.categories.serializers import CategorySerializer
  3. from misago.core.serializers import MutableFields
  4. from misago.threads.models import Post
  5. from misago.users.serializers import UserSerializer
  6. from .post import PostSerializer
  7. __all__ = [
  8. 'FeedSerializer',
  9. ]
  10. FeedUserSerializer = UserSerializer.subset_fields(
  11. 'id', 'username', 'avatars', 'absolute_url')
  12. FeedCategorySerializer = CategorySerializer.subset_fields(
  13. 'name', 'css_class', 'absolute_url')
  14. class FeedSerializer(PostSerializer, MutableFields):
  15. poster = FeedUserSerializer(many=False, read_only=True)
  16. category = FeedCategorySerializer(many=False, read_only=True)
  17. thread = serializers.SerializerMethodField()
  18. top_category = serializers.SerializerMethodField()
  19. class Meta:
  20. model = Post
  21. fields = PostSerializer.Meta.fields + [
  22. 'category',
  23. 'thread',
  24. 'top_category'
  25. ]
  26. def get_thread(self, obj):
  27. return {
  28. 'title': obj.thread.title,
  29. 'url': obj.thread.get_absolute_url()
  30. }
  31. def get_top_category(self, obj):
  32. try:
  33. return FeedCategorySerializer(obj.top_category).data
  34. except AttributeError:
  35. return None