Skip to content
Snippets Groups Projects
serializers.py 1.92 KiB
Newer Older
  • Learn to ignore specific revisions
  • from rest_framework import serializers
    
    from wagtail.core.models import Page
    
    
    from .models import ApplicationSubmission
    
    
    
    class SubmissionListSerializer(serializers.ModelSerializer):
    
        url = serializers.HyperlinkedIdentityField(view_name='funds:api:submissions:detail')
    
        class Meta:
            model = ApplicationSubmission
    
            fields = ('id', 'title', 'status', 'url')
    
    
    
    class SubmissionDetailSerializer(serializers.ModelSerializer):
    
        questions = serializers.SerializerMethodField()
        meta_questions = serializers.SerializerMethodField()
    
        stage = serializers.CharField(source='stage.name')
    
        class Meta:
            model = ApplicationSubmission
    
            fields = ('id', 'title', 'stage', 'meta_questions', 'questions')
    
        def serialize_questions(self, obj, fields):
            for field_id in fields:
    
                yield obj.serialize(field_id)
    
    
        def get_meta_questions(self, obj):
    
            meta_questions = {
                'title': 'Project Name',
                'full_name': 'Legal Name',
                'email': 'Email',
                'value': 'Requested Funding',
                'duration': 'Project Duration',
                'address': 'Address'
            }
            data = self.serialize_questions(obj, obj.named_blocks.values())
            data = [
                {
                    **response,
                    'question': meta_questions.get(response['type'], response['question'])
                }
                for response in data
            ]
            return data
    
    
        def get_questions(self, obj):
    
            return self.serialize_questions(obj, obj.normal_blocks)
    
    
    
    class RoundLabSerializer(serializers.ModelSerializer):
        workflow = serializers.SerializerMethodField()
    
        class Meta:
            model = Page
            fields = ('id', 'title', 'workflow')
    
        def get_workflow(self, obj):
            return [
                {
                    'value': phase.name,
                    'display': phase.display_name
                }
                for phase in obj.workflow.values()
            ]