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.
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