我想用新文件更新FileField。所有文件都保存在S3上。
models.py
class PrescriptionMediaStorage(S3Boto3Storage):
location = settings.AWS_PRESCRIPTION_MEDIA_LOCATION
file_overwrite = True
custom_domain = f'{settings.AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'
class UploadPrescription(models.Model):
image = models.FileField(storage=PrescriptionMediaStorage())用于createview的:
prescription_obj = UploadPrescription.objects.create(image=image)
prescription_obj.image = prescription_obj.image.url
prescription_obj.save()用于Updateview,我尝试过这样做,但它给出了错误
UploadPrescription.objects.filter(id=prescription_id).update(image=image)
prescription_obj = UploadPrescription.objects.get(id=prescription_id)
prescription_obj.image = prescription_obj.image.url
prescription_obj.save()当我试图打开图像字段中保存的url时,我得到了以下消息
<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Key>media/prescription/1STUSERS-BANNER.jpg</Key>
<RequestId>5D1396D45DF8E1F7</RequestId>
<HostId>0Chq0gedgy/o8942zo5JEz2Tp4iE6df51v0o5iY6GnNGKH3bOXb1ee9XKupKY5GYCfvankTGXHI=
</HostId>
</Error>发布于 2020-11-15 15:56:47
好的,不确定您在这里做什么,但是这是如何正确地使用ImageField --尝试这些更改,看看它们是否解决了您的问题:
不要将url写入模型的图像字段。假设<the_image_file>是一个有效的图像文件,那么只需要一行:
views.py
# creates and saves an UploadPresecription with the given image:
prescription_obj = UploadPrescription.objects.create(image=<the_image_file>)要在<image> div中使用图像,您可以访问url,如下所示:
template.html
<image src="{{prescription_obj.image.url}}" />要替换prescription_obj上的图像,只需执行以下操作:
views.py
prescription_obj = UploadPrescription.objects.get(id=<the_id>)
prescription_obj.image = <the_new_image_file>
prescription_obj.save()注意,根据您的设置,您的S3桶可能保留旧映像的一个版本,但它将不再与更新的prescription_obj相关联。
在这里阅读ImageField:https://docs.djangoproject.com/en/3.1/topics/files/
https://stackoverflow.com/questions/64834783
复制相似问题