Python 在南方迁移的情况下,文件字段不尊重上传到

Python 在南方迁移的情况下,文件字段不尊重上传到,python,django,django-south,Python,Django,Django South,我最近将upload_改为FileField的参数,现在我正在尝试编写一个South数据迁移,以将存储在旧系统下的文件移动到新系统。我编写了一些FileField文档中指出的代码: def forwards(self, orm): for mf in orm.ManagedFile.objects.all(): print mf.content.path oldpath = mf.content.path cf = ContentFile(

我最近将upload_改为FileField的参数,现在我正在尝试编写一个South数据迁移,以将存储在旧系统下的文件移动到新系统。我编写了一些FileField文档中指出的代码:

def forwards(self, orm):
    for mf in orm.ManagedFile.objects.all():
        print mf.content.path
        oldpath = mf.content.path
        cf = ContentFile(mf.content.read())
        cf.name = oldpath
        mf.content = cf
        mf.save()
这会根据一些默认规则保存所有文件,它们最终都会在MEDIA_ROOT中释放,而不是上传到函数指定的位置


经过一番思考,我明白了为什么会这样,但我能做些什么呢

可以手动重新连接upload_,以实现如下功能:

 mf._meta.get_field('content').generate_filename = path_maker
生成的代码如下所示:

def path_maker(m_file, filename):
    ext = str(os.path.splitext(filename)[1])
    return os.path.join('m_files', m_file.hash) + ext

...

def forwards(self, orm):
    for mf in orm.ManagedFile.objects.all():
        mf._meta.get_field('content').generate_filename = path_maker
        print mf.content.path
        oldpath = mf.content.path
        cf = ContentFile(mf.content.read())
        cf.name = oldpath
        mf.content = cf
        mf.save()
我问了一会儿就找到了答案。我将把它留在这里,因为它更容易被有文件字段问题的人找到。(ImageField是一个子类)