thread.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from django.core.urlresolvers import reverse
  2. from rest_framework import serializers
  3. from misago.categories.serializers import BasicCategorySerializer
  4. from misago.threads.models import Thread
  5. __all__ = [
  6. 'ThreadSerializer',
  7. 'ThreadListSerializer',
  8. ]
  9. class ThreadSerializer(serializers.ModelSerializer):
  10. category = BasicCategorySerializer()
  11. is_read = serializers.SerializerMethodField()
  12. top_category = BasicCategorySerializer()
  13. acl = serializers.SerializerMethodField()
  14. class Meta:
  15. model = Thread
  16. fields = (
  17. 'id',
  18. 'title',
  19. 'category',
  20. 'top_category',
  21. 'is_read',
  22. 'acl',
  23. )
  24. def get_is_read(self, obj):
  25. try:
  26. return obj.is_read
  27. except AttributeError:
  28. return None
  29. def get_acl(self, obj):
  30. try:
  31. return obj.acl
  32. except AttributeError:
  33. return {}
  34. class ThreadListSerializer(ThreadSerializer):
  35. category = serializers.PrimaryKeyRelatedField(read_only=True)
  36. top_category = serializers.SerializerMethodField()
  37. class Meta:
  38. model = Thread
  39. fields = (
  40. 'id',
  41. 'title',
  42. 'category',
  43. 'top_category',
  44. 'is_read',
  45. 'acl',
  46. )
  47. def get_top_category(self, obj):
  48. try:
  49. return obj.top_category.pk
  50. except AttributeError:
  51. return None
  52. def get_acl(self, obj):
  53. try:
  54. return obj.acl
  55. except AttributeError:
  56. return {}