简体   繁体   English

在 DRF 中发送完整的图像 url

[英]Send full image url in DRF

I am trying to get the full image URL in the API in DRF i am trying to use build_absolute_uri but i keep receiving the error The 'image' attribute has no file associated with it.我正在尝试在 DRF 中的 API 中获取完整的图像 URL 我正在尝试使用 build_absolute_uri 但我一​​直收到错误“图像”属性没有与之关联的文件。

the serializer.py:序列化程序.py:

class VesselInfoSerializer(serializers.ModelSerializer):

    image_url = serializers.SerializerMethodField()

    def get_image_url(self, Vessel):
        request = self.context.get('request')
        image_url = Vessel.image.url
        return request.build_absolute_uri(image_url)

    vessel_component_count = serializers.IntegerField(
        source='vessel_components.count',
        read_only=True
    )
    vessel_inventory_category_count = serializers.IntegerField(
        source='vessel_inventory_category.count',
        read_only=True
    )
    vessel_inventory_item_count = serializers.IntegerField(
        source='category_items.count',
        read_only=True
    )

    class Meta:
        model = Vessel
        fields = '__all__'

models.py:模型.py:

class Vessel(models.Model):
    name = models.CharField(max_length=255)
    imo = models.CharField(max_length=255)
    image = models.ImageField(blank=True, upload_to='vessel_image')

    def __str__(self):
        return self.name

the view:风景:

@api_view(['GET'])
def getVesselInfo(request):
    vessels = Vessel.objects.all()
    vSerializer = VesselInfoSerializer(
        vessels, many=True, context={"request": request})
    return Response(vSerializer.data)

You should probably check that the url is not None :您可能应该检查 url 不是 None :

    def get_image_url(self, Vessel):
        request = self.context.get('request')
        image_url = Vessel.image.url if Vessel.image and hasattr(Vessel.image, 'url') else None
        if image_url:
            return request.build_absolute_uri(image_url)
        return None

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM