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'对象没有属性'替换'
2)我对JsonField有类似的问题:
for key, value in types.items():
v = value.replace('a', 'c2')
types[key] = v
在这种情况下,而不是替换是保存一个空的json。
答案 0 :(得分:1)
实际上django ImageField
是在数据库中存档的,所以你可以用下一步替换:
images = Image.objects.all()
for image_obj in images:
image_obj.image = image_obj.image.url.replace('co', 'assoc')
image.obj.save()
或者bulk update使用sql替换功能
from django.db.models import F, Func, Value
Image.objects.update(
image=Func(
F('image'),
Value('co'), Value('assoc'),
function='replace',
)
)