通过 django 查询集上的 values() 方法访问 ImageField 的 url

Accessing url of ImageField via values() method on django queryset

我在 Django 中有一个数据模型,用于保存用户上传的照片。 Photo 模型(ImageField 类型)中有一个名为 image_file 的属性,其中存储了图像的 url。例如,我可以在模板(和视图)中使用 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。这不应该奏效吗?

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

p.s。它是一个 postgresql 后端,底层存储 class 已被覆盖

url 是一个 property,不是数据库 (FileField code) 中的值,这就是为什么您无法从 values() 获取它的原因。据我所知,您必须单独获取 url 值...

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