feed.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  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('id', 'username', 'avatars', 'absolute_url')
  11. FeedCategorySerializer = CategorySerializer.subset_fields('name', 'css_class', 'absolute_url')
  12. class FeedSerializer(PostSerializer, MutableFields):
  13. poster = FeedUserSerializer(many=False, read_only=True)
  14. category = FeedCategorySerializer(many=False, read_only=True)
  15. thread = serializers.SerializerMethodField()
  16. top_category = serializers.SerializerMethodField()
  17. class Meta:
  18. model = Post
  19. fields = PostSerializer.Meta.fields + ['category', 'thread', 'top_category']
  20. def get_thread(self, obj):
  21. return {'title': obj.thread.title, 'url': obj.thread.get_absolute_url()}
  22. def get_top_category(self, obj):
  23. try:
  24. return FeedCategorySerializer(obj.top_category).data
  25. except AttributeError:
  26. return None