django - 在 Django 默认环境之外的数据库中替换/更改文件路径
问题描述
1)我有一个包含文件名的模型:
class Image(models.Model):
p = models.ForeignKey(P, related_name='images', on_delete=models.CASCADE)
image = models.ImageField(upload_to=file_upload_to)
因为我正在移动文件夹结构,所以我想在 Django 之外更改数据库中的图像列记录。
所以,我尝试了:
images = Image.objects.all()
for image_obj in images:
image_obj.image.url.replace('co', 'assoc')
image.obj.save()
它失败了,什么也不做;
如果我只尝试 image_obj.image 我会收到以下错误:
'ImageFieldFile' 对象没有属性 'replace'
2)我对 JsonField 有类似的问题:
for key, value in types.items():
v = value.replace('a', 'c2')
types[key] = v
在这种情况下,不是替换而是保存一个空的 json。
解决方案
实际上 djangoImageField
是在数据库中归档的字符,因此您可以通过以下方式进行替换:
images = Image.objects.all()
for image_obj in images:
image_obj.image = image_obj.image.url.replace('co', 'assoc')
image.obj.save()
或者做批量更新使用 sql 替换功能
from django.db.models import F, Func, Value
Image.objects.update(
image=Func(
F('image'),
Value('co'), Value('assoc'),
function='replace',
)
)
推荐阅读
- android - You must call setGraph() before calling getGraph()
- python - 用于更改 Outlook 邮件项目主题行的 Python 函数
- pygame - 如何用鼠标在 pygame 中移动精灵图像?
- swiftui - SwiftUI ViewModel 更新
- swift - Swift - 钥匙串服务 SecKeychainSetDefault 作为 root 失败 - 不会设置默认值
- python - 在列表中搜索多个项目
- sql-server - SQL Server - 按升序排序似乎不起作用
- swift - 为什么我在 swift 上的视图是这样的 我更新了它,现在我能够向下滑动并能够返回到最后一页 XCODE 11
- google-apps-script - 连续运行 Apps 脚本函数
- java - 领域结果返回 null