gpt4 book ai didi

python - django-storages获取完整的S3网址

转载 作者:行者123 更新时间:2023-12-01 10:34:34 24 4
gpt4 key购买 nike

我有几个使用django-storages和Amazon S3的类

class Cache(models.Model):
identifier = models.TextField(blank=True, null=True)
cache_file = models.FileField(upload_to="cache")

现在,我需要获取缓存文件位置的URL。
cache = cache.objects.get(identifier=identifier)
cache_file = cache.cache_file

缓存文件是一个 FieldFile对象,其中包含 storage对象。

在数据库中,我只看到我先前保存的 cache/file.json值。

在这种情况下,我不需要获取文件,而是获取文件所在的完整URL。
我怎么能得到这个?

最佳答案

我知道这个问题已经回答了,但以防万一有人偶然发现这个问题时正在寻找我需要的东西...

我发现对于大型查询,在需要提取大量记录的情况下,从模型实例(report.file.url)中提取url会导致糟糕的性能,因为Django在通过这种方式访问​​模型字段时会针对每条记录进行数据库查询。这是替代方法的示例实现,您可以在其中进行整个查询,并在需要时仍获取url。

from django.core.files.storage import get_storage_class
from . import models

# instance of the current storage class
media_storage = get_storage_class()()

# grabs all of my reports at once and stores them in a list of dicts
# instead of separate Report instances
report_list = models.Report.objects.values()

# stick the urls into the my records
report_list = [
{**report, "url": media_storage.url(report["file"])}
for report in report_list
]

关于python - django-storages获取完整的S3网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37992661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com