我有一个带有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在结构中,如何处理这个不存在的文件情况
答案 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。