Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django解压文件,向数据库添加内容_Python_Database_Django_Os.walk - Fatal编程技术网

Python Django解压文件,向数据库添加内容

Python Django解压文件,向数据库添加内容,python,database,django,os.walk,Python,Database,Django,Os.walk,我正在尝试创建一个系统,使管理员能够上传zipfile,然后脚本将自动使用信号,解压缩它,搜索jpg,png中的所有文件。创建它们的列表,并根据该列表生成数据库记录 在模型中,我有Project和Photo表,Photo有多对一aka外键与Project的关系 下面的脚本是我正在工作的信号。我可以无错误地获取instance.file\u zip.path,并且脚本在手动运行时运行良好 经过长时间的调试,我假设attown\u to=instance有问题,但我不知道如何修复它,因为我不知道它为

我正在尝试创建一个系统,使管理员能够上传zipfile,然后脚本将自动使用
信号
,解压缩它,搜索
jpg,png
中的所有文件。创建它们的
列表
,并根据该列表生成数据库记录

在模型中,我有
Project
Photo
表,
Photo
多对一
aka
外键
Project
的关系

下面的脚本是我正在工作的信号。我可以无错误地获取
instance.file\u zip.path
,并且脚本在手动运行时运行良好

经过长时间的调试,我假设
attown\u to=instance
有问题,但我不知道如何修复它,因为我不知道它为什么会产生错误。 提取部分很好,我只是把它们放在这里作为参考,很可能你不需要阅读和理解它

@receiver(post_save, sender=Project)
def unzip_and_process(sender, instance, **kwargs):
    #project_zip = FieldFile.open(file_zip, mode='rb')
    file_path = instance.file_zip.path
    file_list = []
    with zipfile.ZipFile(file_path, 'r') as project_zip:
        project_zip.extractall(re.search('[^\s]+(?=\.zip)', file_path).group(0))
        project_zip.close()
    for root, dirs, files in os.walk(file_path):
        for filename in files:
            file_list.append(os.path.join(root, filename))
    photo_list = filter(filter_photos, file_list)
    for photo in photo_list:
        print 'Processing %s'%photo
        p = Photo.objects.create(belongs_to=instance, img=photo, desc='Processed from zipfile')
        p.save()
更新

class Project(models.Model):
    project_name=models.CharField(max_length=150)
    date_taken=models.DateField()
    date_deadline=models.DateField()
    price=models.FloatField()
    price_paid=models.BooleanField()
    owner=models.ForeignKey(User)
    file_zip=models.FileField(upload_to='projects/%Y/%m/%d')

    def __unicode__(self):
        return self.project_name

    def file_path(self):
        return re.search('[^\s]+(?=\.zip)', self.file_zip.name).group(0)

class Photo(models.Model):

    def project_path(instance, filename):
        return '%s/%s'%(instance.belongs_to.file_path(),filename)

    belongs_to=models.ForeignKey(Project, verbose_name="related_project")
    img=models.ImageField(upload_to=project_path, max_length=255)
    desc=models.CharField(max_length=255)

    def __unicode__(self):
        return '%s FROM [%s]'%(self.img.name,self.belongs_to)
file\u路径
指的是
zip
文件。不是
目录
,因此
os.walk
不返回任何内容


file\u路径
指的是
zip
文件。不是
目录
,因此
os.walk
不返回任何内容

django photologue有你想要的东西,他们创建了一个类似的方法来上传zipfile

链接:以防你不想用谷歌搜索


更重要的是,zip上传类是GalleryUpload(models.Model)

django photologue有一些你想要的东西,他们创建了一个类似的方法来上传zipfile

链接:以防你不想用谷歌搜索


此外,zip上传类是GalleryUpload(models.Model)

将错误添加到您的帖子中。还可以添加与错误实际相关的任何其他代码,如
post_save
Project
。它连接到一个发出无声错误的信号。不会显示错误,但不会创建数据库条目,但会进行提取和文件列表/筛选。我很确定Project类是不相关的,但我马上就要添加它了。为什么要使用
ZipFile.extractall()
?从ZipFile提取所有文件?请将错误添加到您的帖子中。还可以添加与错误实际相关的任何其他代码,如
post_save
Project
。它连接到一个发出无声错误的信号。不会显示错误,但不会创建数据库条目,但会进行提取和文件列表/筛选。我很确定Project类是不相关的,但我马上就要添加它了。为什么要使用
ZipFile.extractall()
?从一个ZipFile中提取所有文件?这几乎是我一直尝试编写的东西。嗯,最好是根据我的要求查看和编辑。干杯。这和我一直想写的差不多。嗯,最好是根据我的要求查看和编辑。干杯
for root, dirs, files in os.walk(file_path):