Django图像属性没有与其关联的文件REST API

时间:2017-11-15 12:35:21

标签: python django image rest url

我有一个带有ImageField的模型Employee,我返回模型的REST API响应,但是它显示了这个错误

The 'face_image' attribute has no file associated with it.

我的API以这种方式生成响应: https://gitlab.com/firdausmah/railercom/blob/master/railercomapp/api.py

@api_view(['GET'])
def get_employee(request):
    data = [emp.as_dict() for emp in Employee.objects.all()]
    return Response(data, status=status.HTTP_200_OK) 

以下是模型:

https://gitlab.com/firdausmah/railercom/blob/master/railercomapp/models.py

class Employee(models.Model):
    ...
    face_image = models.ImageField(upload_to='face_image/', blank=True)

    def face_image_url(self):
        if self.face_image and hasattr(self.face_image, 'url'):
            return self.face_image.url

    def as_dict(self):
        return {"id":self.id,
                ...
                "face_image":self.face_image.url, <-- causes no file associated
                ...}

如何在没有文件的情况下解决此REST响应处理图像域?我尝试在这里遵循一些方法Django The 'image' attribute has no file associated with it但我无法完成帮助函数。

如果删除图像字段,它将以这种方式生成响应https://imgur.com/a/JzQrD。但我希望imagefield在结构中,如何处理这个不存在的文件情况

2 个答案:

答案 0 :(得分:1)

您需要明确处理此案例。在这种情况下,您的as_dict方法应如下所示:

def as_dict(self):
    return {"id":self.id,
            ...
            "face_image": self.face_image.url if self.face_image else None
            ...}

答案 1 :(得分:0)

下面:

"face_image":self.face_image.url, <-- causes no file associated

您实际上并未使用face_image_url方法。

应该是:

`"face_image":self.face_image_url()

正如我上面所说,我认为像你一样处理模型的序列化真的是个坏主意。我强烈建议您查看serializers