feed.py 1.3 KB

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