Search code examples
djangodjango-rest-framework

No output in serializermethodfield()


I defined a serializermethodfield. My problem in displaying the output. When this method exists, the image field is empty for me. But if I delete this serializermethodfield, my image output will be correct.

serilizer:

class ArticleSerializer(serializers.ModelSerializer):
    user = serializers.StringRelatedField(read_only=True)
    image=serializers.SerializerMethodField()
    class Meta:
        model=Article
        fields="__all__"
        validators=[Checktitle()]
 

    def get_image (self , obj ):
        request=self.context.get("request")
        if obj.image:
            image_url=obj.image.url
            return request.build_absolute_uri(image_url)
        return None

view:

class ArticleListview(APIView):
    def get(self,request):
        query_set=Article.objects.all()
        ser = ArticleSerializer(instance=query_set,many=True,context={'request':request})
        print(request)
        return Response(data=ser.data)

I wanted to change the url image. But by defining this method, the image is not saved at all.


Solution

  • If you try to change the Article model's image URL, you can override the representation method.

    class ArticleSerializer(serializers.ModelSerializer):
        user = serializers.StringRelatedField(read_only=True)
        class Meta:
            model=Article
            fields="__all__"
            validators=[Checktitle()]
            
       def to_representation(self, instance):
            resp = super().to_representation(instance)
            request=self.context.get("request")
            if instance.image:
                image_url=instance.image.url
                resp['image'] = request.build_absolute_uri(image_url)
        return resp