serializers.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. from rest_framework import serializers
  2. from extras.models import CF_TYPE_SELECT, CustomFieldChoice, CustomFieldValue, Graph
  3. # class CustomFieldSerializer(serializers.ModelSerializer):
  4. # """
  5. # Extends ModelSerializer to render any CustomFields and their values associated with an object.
  6. # """
  7. # custom_fields = serializers.SerializerMethodField()
  8. #
  9. # def get_custom_fields(self, obj):
  10. #
  11. # # Gather all CustomFields applicable to this object
  12. # fields = {cf.name: None for cf in self.context['custom_fields']}
  13. # custom_field_choices = self.context['custom_field_choices']
  14. #
  15. # # Attach any defined CustomFieldValues to their respective CustomFields
  16. # for cfv in obj.custom_field_values.all():
  17. #
  18. # # Attempt to suppress database lookups for CustomFieldChoices by using the cached choice set from the view
  19. # # context.
  20. # if cfv.field.type == CF_TYPE_SELECT:
  21. # cfc = {
  22. # 'id': int(cfv.serialized_value),
  23. # 'value': custom_field_choices[int(cfv.serialized_value)]
  24. # }
  25. # fields[cfv.field.name] = CustomFieldChoiceSerializer(instance=cfc).data
  26. # else:
  27. # fields[cfv.field.name] = cfv.value
  28. #
  29. # return fields
  30. class CustomFieldValueSerializer(serializers.ModelSerializer):
  31. class Meta:
  32. model = CustomFieldValue
  33. fields = ['field', 'serialized_value']
  34. class CustomFieldChoiceSerializer(serializers.ModelSerializer):
  35. class Meta:
  36. model = CustomFieldChoice
  37. fields = ['id', 'value']
  38. class GraphSerializer(serializers.ModelSerializer):
  39. embed_url = serializers.SerializerMethodField()
  40. embed_link = serializers.SerializerMethodField()
  41. class Meta:
  42. model = Graph
  43. fields = ['name', 'embed_url', 'embed_link']
  44. def get_embed_url(self, obj):
  45. return obj.embed_url(self.context['graphed_object'])
  46. def get_embed_link(self, obj):
  47. return obj.embed_link(self.context['graphed_object'])