django:在添加新照片时删除以前的照片

Posted

技术标签:

【中文标题】django:在添加新照片时删除以前的照片【英文标题】:django: delete pevious photo while adding a new photo 【发布时间】:2021-02-13 23:29:16 【问题描述】:

我正在开发用户个人资料,用户可以在其中添加个人资料图片。添加图片工作正常,但是当我想添加新照片时,旧照片不会消失。我的 django 版本是 3.1,我尝试过 django-smartfields 但它仍然无法正常工作。有人可以帮忙吗?

views.py

from smartfields import fields
     class Profile_Pic(models.Model):
        user = models.ForeignKey(User, default='', null=False, on_delete=models.CASCADE, related_name='userPic')
        profile_pic = fields.ImageField(upload_to='media', default='admin_car/static/images/img_avatar.png', blank=True)
    
        class Meta:
            db_table = 'Profile_Pic'

user_image.html

   % extends 'datas/base.html' %

    % block content %
        % load static %
        <h1 class="text-center" style="color: white">Add Profile Picture</h1>
        <br><br>
    
         <div class= "col-md-6.offset-md-3">
    
        <form method="POST" enctype="multipart/form-data">
        % csrf_token %
    
        % if form.errors %
            <div class="alert alert-warning alert-dismissable" role="alert">
                        <button class="close" data-dismiss="alert">
                            <small><sup>x</sup></small>
                        </button>
                <p>Data Error, Please Check Again.....</p>
                        % for field in form %
                          % if field.errors %
                             field.errors 
                          % endif %
                        % endfor %
            </div>
    
        % endif %
    
         form.as_p 
    
        <input type="submit" value="Save" class="btn btn-primary">
    
        </form>
    
         </div>

% endblock %

【问题讨论】:

【参考方案1】:

如果您的图片在您的 static/image 文件夹中更新,但没有在浏览器中更新,这是因为浏览器缓存了您的静态文件,并且它们不会轻易更改。但是有一些解决方法可以使用“whitenoise” 请按照以下步骤操作。

清除浏览器缓存以清除现有缓存。

pip3 install whitenoise 

然后将以下内容添加到 settings.py 的末尾

if DEBUG:
MIDDLEWARE = [
    'whitenoise.middleware.WhiteNoiseMiddleware',
] + MIDDLEWARE
INSTALLED_APPS = [
    'whitenoise.runserver_nostatic',
] + INSTALLED_APPS

然后重新运行您的服务器,静态文件将不再被缓存

【讨论】:

谢谢你的回答,但实际上我想删除以前保存的模型,每当用户要添加新图片时,应该保存新的并删除以前的。 那么你可以使用这里显示的方法上传图片github.com/csev/dj4e-samples/tree/master/pics这里的图像存储和替换在数据库中而不是在静态文件中,你可以自己解决

以上是关于django:在添加新照片时删除以前的照片的主要内容,如果未能解决你的问题,请参考以下文章

jsp实现仿QQ空间新建多个相册名称,向相册中添加照片

jsp实现仿QQ空间新建多个相册名称,向相册中添加照片

如何使用照片框架在 IOS 8 中将照片添加到照片库

使用照片框架从照片库中删除照片

安卓 | 如何恢复手机删除的照片?

如何在 PHAsset 中添加图像并将其从照片库中删除?