Django在保存时更改图像路径

时间:2014-12-08 16:37:09

标签: django image django-models

我有一个系统,用户可以将封面照片上传到播放列表。播放列表模型如下:

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文件夹?

1 个答案:

答案 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...

此代码未经测试,仅作为一般概念。 希望这会对你有所帮助。