首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >django管理中使用时与图像字段相关的问题

django管理中使用时与图像字段相关的问题
EN

Stack Overflow用户
提问于 2011-08-05 13:29:15
回答 3查看 373关注 0票数 1

我有一个跟随班纳班。它可以由管理员编辑。

代码语言:javascript
运行
复制
class Banner(models.Model):
    name        = models.CharField(max_length = 128)
    link        = models.TextField(max_length = 450)
    image       = models.ImageField(upload_to = 'banner_images')

有两个问题。

  1. 在保存图像时,它使用原始文件名保存。我想用一些唯一的名称来更改它,这样当相同名称的图像再次上传到指定的目录中时,就不会发生冲突。
  2. 在更新图像时,必须删除第一个图像文件。这不会发生的..。

任何建议都会有帮助。提前谢谢。

EN

回答 3

Stack Overflow用户

发布于 2011-08-05 15:27:24

试着做这样的事情:

代码语言:javascript
运行
复制
from os import rename
class Banner(models.Model):
    name        = models.CharField(max_length = 128)
    link        = models.TextField(max_length = 450)
    image       = models.ImageField(upload_to = 'banner_images')

    def save(self):
            super(Banner, self).save()
            new_filename = <insert code here to change name>
            self.image.name = new_filename
            rename(static_path+'banner_images/'+self.image, static_path+'banner_images/'+new_filename)
            super(Banner, self).save()

我不确定是否需要调用超级(Banner).save()两次。可能需要第一个文件来保存文件,第二个文件可能需要更新DB记录。

票数 1
EN

Stack Overflow用户

发布于 2011-08-05 20:48:27

1) upload_to可以是可调用的,在保存时可以修改它的文件名(文档)

2)参见https://code.djangoproject.com/ticket/6792,你必须自己删除它,

票数 0
EN

Stack Overflow用户

发布于 2011-08-18 06:34:34

由于我遇到了与通过管理节省图像有关的问题,所以我得到了以下解决方案,它回答了我所有的查询.

  • 首先,我发现尽管admin保留了原始的文件名,但是如果同名的文件已经存在,它仍然会将一个计数作为后缀来防止重复的文件名.例如,如果上传相同的文件,它将存储为图像、image_2、image_3等.
  • 第二,在通过admin更改图像时,它没有删除原始文件。为此,我用admin.py编写了以下代码。它做的很好..。

代码:

代码语言:javascript
运行
复制
class BannerAdmin(admin.ModelAdmin):

    def save_model(self, request, obj, form, change):
        #Remove the previous file if the object is not new 
        #and new file supplied.        
        if obj.id != None and len(request.FILES) > 0:

            import os
            old_obj = m.Banner.objects.get(id = obj.id)
            os.remove(old_obj.image.path)

如果你有类似的问题,希望这对你有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6957079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档