attachment.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from rest_framework import serializers
  2. from django.urls import reverse
  3. from misago.threads.models import Attachment
  4. __all__ = ['AttachmentSerializer']
  5. class AttachmentSerializer(serializers.ModelSerializer):
  6. post = serializers.PrimaryKeyRelatedField(read_only=True)
  7. acl = serializers.SerializerMethodField()
  8. is_image = serializers.SerializerMethodField()
  9. filetype = serializers.SerializerMethodField()
  10. url = serializers.SerializerMethodField()
  11. class Meta:
  12. model = Attachment
  13. fields = [
  14. 'id',
  15. 'filetype',
  16. 'post',
  17. 'uploaded_on',
  18. 'uploader_name',
  19. 'filename',
  20. 'size',
  21. 'acl',
  22. 'is_image',
  23. 'url',
  24. ]
  25. def get_acl(self, obj):
  26. try:
  27. return obj.acl
  28. except AttributeError:
  29. return None
  30. def get_is_image(self, obj):
  31. return obj.is_image
  32. def get_filetype(self, obj):
  33. return obj.filetype.name
  34. def get_url(self, obj):
  35. return {
  36. 'index': obj.get_absolute_url(),
  37. 'thumb': obj.get_thumbnail_url(),
  38. 'uploader': self.get_uploader_url(obj),
  39. }
  40. def get_uploader_url(self, obj):
  41. if obj.uploader_id:
  42. return reverse(
  43. 'misago:user', kwargs={
  44. 'slug': obj.uploader_slug,
  45. 'pk': obj.uploader_id,
  46. }
  47. )
  48. else:
  49. return None