serializers.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. from django.core.urlresolvers import reverse
  2. from rest_framework import serializers
  3. from misago.core.utils import format_plaintext_for_html
  4. from misago.categories.models import Category
  5. __all__ = ['CategorySerializer']
  6. class CategorySerializer(serializers.ModelSerializer):
  7. description = serializers.SerializerMethodField()
  8. is_read = serializers.SerializerMethodField()
  9. subcategories = serializers.SerializerMethodField()
  10. absolute_url = serializers.SerializerMethodField()
  11. last_poster_url = serializers.SerializerMethodField()
  12. last_thread_url = serializers.SerializerMethodField()
  13. acl = serializers.SerializerMethodField()
  14. class Meta:
  15. model = Category
  16. fields = (
  17. 'id',
  18. 'name',
  19. 'description',
  20. 'is_closed',
  21. 'threads',
  22. 'posts',
  23. 'last_post_on',
  24. 'last_thread_title',
  25. 'last_poster_name',
  26. 'css_class',
  27. 'is_read',
  28. 'subcategories',
  29. 'absolute_url',
  30. 'last_thread_url',
  31. 'last_poster_url',
  32. 'acl',
  33. )
  34. def get_description(self, obj):
  35. if obj.description:
  36. return {
  37. 'plain': obj.description,
  38. 'html': format_plaintext_for_html(obj.description),
  39. }
  40. else:
  41. return None
  42. def get_is_read(self, obj):
  43. try:
  44. return obj.is_read
  45. except AttributeError:
  46. return None
  47. def get_subcategories(self, obj):
  48. try:
  49. return CategorySerializer(obj.subcategories, many=True).data
  50. except AttributeError:
  51. return []
  52. def get_absolute_url(self, obj):
  53. return obj.get_absolute_url()
  54. def get_last_thread_url(self, obj):
  55. return obj.get_last_thread_url()
  56. def get_last_poster_url(self, obj):
  57. if obj.last_poster_id:
  58. return reverse('misago:user', kwargs={
  59. 'user_slug': obj.last_poster_slug,
  60. 'user_id': obj.last_poster_id,
  61. })
  62. else:
  63. return None
  64. def get_acl(self, obj):
  65. try:
  66. return obj.acl
  67. except AttributeError:
  68. return []