"""Common serializers for app comment.""" from rest_framework import serializers from comment import models from establishment.models import Establishment class CommentBaseMixin(serializers.Serializer): """Comment base serializer mixin""" # RESPONSE nickname = serializers.CharField(read_only=True, source='user.username') profile_pic = serializers.ImageField(read_only=True, source='user.image') class CommentSerializer(CommentBaseMixin, serializers.ModelSerializer): """Comment serializer""" is_mine = serializers.BooleanField(read_only=True) profile_pic = serializers.SerializerMethodField() class Meta: """Serializer for model Comment""" model = models.Comment fields = [ 'id', 'user_id', 'is_mine', 'created', 'text', 'mark', 'nickname', 'profile_pic' ] def get_profile_pic(self, obj): """Get profile picture URL""" return obj.user.get_full_image_url(request=self.context.get('request')) class EstablishmentCommentCreateSerializer(CommentSerializer): """Create comment serializer""" mark = serializers.IntegerField() establishment_id = serializers.PrimaryKeyRelatedField(queryset=Establishment.objects.all(), source='content_object', write_only=True) class Meta: """Serializer for model Comment""" model = models.Comment fields = [ 'created', 'text', 'mark', 'nickname', 'profile_pic', 'establishment_id', ] def create(self, validated_data): """Override create method""" validated_data.update({ 'user': self.context.get('request').user }) return super().create(validated_data)