Example #1
0
class AnswerSerializer(serializers.ModelSerializer):
    created = DateTimeUTCField(read_only=True)
    creator = ProfileFKSerializer(read_only=True, source='creator.get_profile')
    updated = DateTimeUTCField(read_only=True)
    updated_by = ProfileFKSerializer(read_only=True, source='updated_by.get_profile')
    num_helpful_votes = serializers.Field(source='num_helpful_votes')
    num_unhelpful_votes = serializers.Field(source='num_unhelpful_votes')

    class Meta:
        model = Answer
        fields = (
            'id',
            'question',
            'content',
            'created',
            'creator',
            'updated',
            'updated_by',
            'is_spam',
            'num_helpful_votes',
            'num_unhelpful_votes',
        )

    def validate_creator(self, attrs, source):
        user = getattr(self.context.get('request'), 'user')
        if user and not user.is_anonymous() and attrs.get('creator') is None:
            attrs['creator'] = user
        return attrs
Example #2
0
class QuestionSerializer(serializers.ModelSerializer):
    # Use slugs for product and topic instead of ids.
    product = serializers.SlugRelatedField(required=True, slug_field='slug')
    topic = TopicField(required=True)
    # Use usernames for creator and updated_by instead of ids.
    created = DateTimeUTCField(read_only=True)
    creator = ProfileFKSerializer(source='creator.get_profile', read_only=True)
    involved = serializers.SerializerMethodField('get_involved_users')
    is_solved = serializers.Field(source='is_solved')
    is_taken = serializers.Field(source='is_taken')
    metadata = QuestionMetaDataSerializer(source='metadata_set',
                                          required=False)
    num_votes = serializers.Field(source='num_votes')
    solution = serializers.PrimaryKeyRelatedField(read_only=True)
    taken_by = ProfileFKSerializer(source='taken_by.get_profile',
                                   read_only=True)
    updated = DateTimeUTCField(read_only=True)
    updated_by = ProfileFKSerializer(source='updated_by.get_profile',
                                     read_only=True)

    class Meta:
        model = Question
        fields = (
            'answers',
            'content',
            'created',
            'creator',
            'id',
            'involved',
            'is_archived',
            'is_locked',
            'is_solved',
            'is_spam',
            'is_taken',
            'last_answer',
            'locale',
            'metadata',
            'num_answers',
            'num_votes_past_week',
            'num_votes',
            'product',
            'solution',
            'taken_until',
            'taken_by',
            'title',
            'topic',
            'updated_by',
            'updated',
        )

    def get_involved_users(self, obj):
        involved = set([obj.creator.get_profile()])
        involved.update(a.creator.get_profile() for a in obj.answers.all())
        return ProfileFKSerializer(involved, many=True).data

    def validate_creator(self, attrs, source):
        user = getattr(self.context.get('request'), 'user')
        if user and not user.is_anonymous() and attrs.get(source) is None:
            attrs['creator'] = user
        return attrs
Example #3
0
 def get_solved_by(self, obj):
     if obj.solution:
         return ProfileFKSerializer(obj.solution.creator.profile).data
     else:
         return None
Example #4
0
 def get_involved(self, obj):
     involved = set([obj.creator.profile])
     involved.update(a.creator.profile for a in obj.answers.all())
     return ProfileFKSerializer(involved, many=True).data
Example #5
0
 def get_updated_by(self, obj):
     updated_by = Profile.objects.get(user=obj.updated_by) if obj.updated_by else None
     return ProfileFKSerializer(updated_by).data if updated_by else None
Example #6
0
 def get_creator(self, obj):
     return ProfileFKSerializer(Profile.objects.get(user=obj.creator)).data
Example #7
0
 def get_updated_by(self, obj):
     if obj.updated_by:
         return ProfileFKSerializer(obj.updated_by.profile).data
     else:
         return None
Example #8
0
 def get_taken_by(self, obj):
     if obj.taken_by:
         return ProfileFKSerializer(obj.taken_by.profile).data
     else:
         return None
Example #9
0
 def get_creator(self, obj):
     return ProfileFKSerializer(obj.creator.profile).data
Example #10
0
 def get_taken_by(self, obj):
     taken_by = Profile.objects.get(
         user=obj.taken_by) if obj.taken_by else None
     return ProfileFKSerializer(taken_by).data if taken_by else None
Example #11
0
 def get_solved_by(self, obj):
     return ProfileFKSerializer(
         obj.solution.creator).data if obj.solution else None
Example #12
0
 def get_involved_users(self, obj):
     involved = set([Profile.objects.get(user=obj.creator)])
     involved.update(
         Profile.objects.get(user=a.creator) for a in obj.answers.all())
     return ProfileFKSerializer(involved, many=True).data