我有一个系统,用户可以将封面照片上传到播放列表。播放列表模型如下:
class Playlist(models.Model):
.
.
image = models.ImageField(upload_to='media/playlistimages')
.
.
上传机制如下:用户选择照片,我将其上传到临时模型,并将其显示给用户。如果用户选择保存照片,我继续并保存图像。预览图像保存在不同的模型中
class PreviewImage(models.Model):
.
.
image = models.ImageField(upload_to='media/previewimages')
.
.
不上传图像两次,当用户第一次选择照片时,我上传并保存在预览图像模型中。然后,如果用户继续保存播放列表,我只将预览图像ID发送到服务器并将该对象中的图像保存到播放列表,如下所示:
playlist.image = previewImage.image
playlist.save()
问题是,图像首先上传到previewimages文件夹,当我保存播放列表的图像时,如上例所示,它仍然在该文件夹中。保存时如何将此文件移动到playlistimages文件夹?
答案 0 :(得分:1)
为了做你想做的事,你可以覆盖PlayList表格' save'方法。类似的东西:
def save(self, commit=True):
temp_file_id = self.cleaned_data.get('preview_image_id', False)
if temp_file_id:
try:
temp_file = PreviewImage.objects.get(pk=temp_file_id)
instance = super(PlayListForm, self).save(commit)
instance.image.save(
os.path.basename(temp_file.file.path),
temp_file.file.file,
commit
)
# If you want to erase the file from its previous location,
# as well as the PreviewImage object do the following
os.remove(temp_file.file.path)
temp_file.delete()
# Finally return saved instance
return instance
except PreviewImage.DoesNotExist:
# handle this the way it fits your needs...
except Exception as e:
raise e;
else:
# handle this the way it fits your needs...
此代码未经测试,仅作为一般概念。 希望这会对你有所帮助。