【问题标题】:Accessing url of ImageField via values() method on django queryset通过 django 查询集上的 values() 方法访问 ImageField 的 url
【发布时间】:2017-08-01 11:35:01
【问题描述】:

我在 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。这不应该奏效吗?

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

附言它是一个 postgresql 后端,并且底层的 Storage 类已被覆盖

【问题讨论】:

  • urlproperty,而不是数据库中的值 (FileField code),这就是您无法从 values() 获取它的原因。据我所知,您必须单独获取 url 值...
  • 这就是我要做的——不过你可能想看看only()。如果你走那条路,你可能应该用Django Debug Toolbar 之类的东西来观察SQL 查询。如果url 属性尝试检索未包含在only() 中的字段,它可能会进行单独的SQL 调用。
  • 当然——你确定only()不会给你id吗?我不记得尝试过,但我不明白为什么它无法拉动它。使用 only(),您不会失去访问任何内容的能力 - 如果您没有指定它,您只会招致另一个 SQL 命中。
  • @JensAstrup:检查过了。原则上你是对的 .only('id','image_file') 确实给了我属性检索 - 但是根据调试工具栏,我最终做的 SQL 查询比我最初做的多 3 倍(很好地调用分析这)。因此,您推荐的原始方法仍然有效。 p.s.当我早些时候说它不会给我ids 时,我意识到我混淆了only()latest()。脑子短路了! Anywhoo,感谢您的帮助。直到下次。

标签: django django-views django-orm


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-27
    • 2017-07-10
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    相关资源
    最近更新 更多