我做一小片的使用Django和JS将处理图片上传软件。到现在为止还挺好。我从dropzone.js通过AJAX获得漂亮的小图片。它们保存在文件系统中,并在我的Photo模型中有一个ImageField,用于跟踪存储的内容和位置。获取的ImageField文件路径post_delete
我甚至捅dropzone.js很好地询问我的dev的服务器删除数据库条目和文件本身。我发现后者缺乏一点。于是我开始编写一个函数,捕获来自我的Photo模型的post_delete信号,并负责处理文件系统中的删除操作。问题是,我似乎无法找到一种方式来获取存储在数据库中的文件路径。
如果我理解正确的话,下面应该工作:
from django.db import models
from django.db.models.signals import post_delete
from django.dispatch import receiver
class Photo(models.Model):
imageFile = models.ImageField(upload_to=generateImageFileNameAndPath)
@receiver(post_delete, sender=Photo)
def cleanupImageFiles(sender, **kwargs):
print("Cleanup called")
p = kwargs['instance']
path = p.imageFile.name
print(path)
但是,当我试图输出path
到控制台,没有什么。
很抱歉的upperCasing而不是使用under_scores作为似乎是Python的约定。我个人觉得下划线会议有点烦人,我正在脑海里摔跤比赛,不管是按照惯例还是走自己的路。现在,我已经完成了后者。
编辑:我似乎无法使其与p.imageFile.url
一起使用,建议here。
editedit:我也试图与pre_delete信号想,也许post_delete数据已经被炸成碎片,这将是愚蠢的,但谁知道:)
EDIT3:调用imageFile.path,不减产它也是。它只是在控制台窗口上生成
[27/Nov/2016 22:29:08] "POST /correcturl/upload/ HTTP/1.1" 200
Cleanup called
[27/Nov/2016 22:29:15] "DELETE /correcturl/upload/ HTTP/1.1" 500 37
。 HTTP错误500只是来自视图无法处理删除调用,因为此代码无法正常工作。这就是我现在在前端用作状态消息的前端。 这可能是值得一提的是,如果我做
print(p)
控制台上的输出
Photo object
不起作用。见编辑号码3. – xtrom0rt
@ xtrom0rt嗯......有趣。试穿后让我回复你。 – xyres
是的,这很奇怪。如果我执行instance.pk,它会为该行提供正确的主键,所以我们应该在对象实例上有一个体面的句柄。然而它表现奇怪。 – xtrom0rt