内容正在载入中,请稍后……
公告
搜索
统计
其他
1 Oct.2011
我的一个Model里有个FileField字段,用来存储文件路径,但是发现1.3版在django admin里面删除model的时候,存储在硬盘上的文件没有一起删除

我查找官方文档,似乎这个功能是在1.3版后改变了(似乎这个活儿django不管了,覆写的delete()方法不会被调用了)。

我的代码:

class BossGT8(models.Model):
    name = models.CharField(max_length=30)
    artist = models.CharField(max_length=40)
    created = models.DateTimeField(auto_now_add=True)
    uploader = models.CharField(max_length=30)
    download = models.IntegerField(default=0)
    filename = models.FileField(upload_to='patch_files/boss_gt8')
    filesize = models.IntegerField(default=0)
    description = models.TextField(max_length=800, blank=True, verbose_name='Description')
    rating = models.IntegerField(default=0)
    isshow = models.BooleanField(default=True)


解决方法是:
用了 django.db.models.signals的post_delete方法
代码如下:

#in models.py

from django.db import models
from django.db.models.signals import post_delete
import os

class BossGT8(models.Model):
name = models.CharField(max_length=30)
created = models.DateTimeField(auto_now_add=True))
filename = models.FileField(upload_to='patch_files')

def delete_file(sender, **kwargs):
patch = kwargs['instance']
os.remove(patch.filename.path)

post_delete.connect(delete_file, sender=BossGT8)


来源:http://www.douban.com/group/topic/22652613/ 分享到QQ空间
时间:02:28 评论(0) 引用(0) 阅读(4234) Tags:
发表评论
  昵称 [注册]
  密码 (游客无需密码)
  网址
  电邮
OpenID登入 权限选项 表情