feed.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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 BasicUserSerializer
  7. from .post import PostSerializer
  8. __all__ = [
  9. 'FeedSerializer',
  10. ]
  11. CategoryFeedSerializer = CategorySerializer.subset(
  12. 'name', 'css_class', 'absolute_url')
  13. class FeedSerializer(PostSerializer, Subsettable):
  14. poster = BasicUserSerializer(many=False, read_only=True)
  15. category = CategoryFeedSerializer(many=False, read_only=True)
  16. thread = serializers.SerializerMethodField()
  17. top_category = serializers.SerializerMethodField()
  18. class Meta:
  19. model = Post
  20. fields = PostSerializer.Meta.fields + [
  21. 'category',
  22. 'thread',
  23. 'top_category'
  24. ]
  25. def get_thread(self, obj):
  26. return {
  27. 'title': obj.thread.title,
  28. 'url': obj.thread.get_absolute_url()
  29. }
  30. def get_top_category(self, obj):
  31. try:
  32. return CategoryFeedSerializer(obj.top_category).data
  33. except AttributeError:
  34. return None