serializers.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from rest_framework import serializers
  2. from extras.models import CF_TYPE_SELECT, CustomFieldChoice, Graph
  3. class CustomFieldsSerializer(serializers.Serializer):
  4. """
  5. Extends a ModelSerializer to render any CustomFields and their values associated with an object.
  6. """
  7. custom_fields = serializers.SerializerMethodField()
  8. def get_custom_fields(self, obj):
  9. fields = {cf.name: None for cf in self.context['view'].custom_fields}
  10. for cfv in obj.custom_field_values.all():
  11. if cfv.field.type == CF_TYPE_SELECT:
  12. fields[cfv.field.name] = CustomFieldChoiceSerializer(instance=cfv.value).data
  13. else:
  14. fields[cfv.field.name] = cfv.value
  15. return fields
  16. class CustomFieldChoiceSerializer(serializers.ModelSerializer):
  17. class Meta:
  18. model = CustomFieldChoice
  19. fields = ['id', 'value']
  20. class GraphSerializer(serializers.ModelSerializer):
  21. embed_url = serializers.SerializerMethodField()
  22. embed_link = serializers.SerializerMethodField()
  23. class Meta:
  24. model = Graph
  25. fields = ['name', 'embed_url', 'embed_link']
  26. def get_embed_url(self, obj):
  27. return obj.embed_url(self.context['graphed_object'])
  28. def get_embed_link(self, obj):
  29. return obj.embed_link(self.context['graphed_object'])