通过Django queryset上的values()方法访问ImageField的URL

Has*_*aig 5 django django-orm django-views

我在Django中有一个数据模型,用于保存用户上传的照片。image_filePhoto模型中(类型为ImageField)有一个属性,其中存储图片的网址(其中包括)。例如,我可以item.image_file.url在模板(和视图)中成功访问此URL 。

但是,我似乎无法在视图中执行以下操作:

Photo.objects.filter(owner=user).order_by('-id').values('id','image_file.url')[:10]

即对于一个特定的用户,我正在尝试获取10个最新的照片对象的图像URL以及对象ID。这给了我FieldError: Cannot resolve keyword 'image_file.url' into field。这不行吗?

我知道我可以检索整个对象并在模板中进行过滤,但是我觉得只检索我实际需要的字段而不是完整对象是更好的选择。

ps这是一个postgresql后端,基础存储类已被覆盖

Jen*_*rup 7

url是 a property,而不是数据库中的值(FileField 代码),这就是您无法从values(). 据我所知,你必须url单独获得价值......

你可能想看看only()。如果你走那条路,你可能应该用 Django 调试工具栏之类的东西来观察 SQL 查询。如果该url属性尝试检索未包含在 中的字段only(),它可能会进行单独的 SQL 调用。