attachment.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from django.urls import reverse
  2. from rest_framework import serializers
  3. from ..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={"slug": obj.uploader_slug, "pk": obj.uploader_id}
  44. )
  45. else:
  46. return None