gin*_*nad 12 django django-signals
有没有办法使用django pre_delete信号取消删除记录?
例:
def on_delete(sender,**kwargs):
if not <some condition>:
#cancel the deletion
# else continue with the deletion
pre_delete.connect(on_delete,sender=MyModel)
Run Code Online (Sandbox Code Playgroud)
另一个问题是有一种方式可以对模型说" 在更改文件之前先删除原始文件 ",因为现在这就是我所做的(见下面的代码),我不确定这是否是最好的方式做到这一点.
def on_save(sender,**kwargs):
obj = kwargs['instance']
try:
id = obj.pk
# find the file
original_file = sender.objects.get(pk=id)
# delete the original file before uploading a new file
original_file.file.delete()
except ....
pre_save.connect(on_save,sender=ModelWithFileUpload)
Run Code Online (Sandbox Code Playgroud)
(在django 1.2中,他们会在更改或删除时自动删除文件但在django 1.3中他们删除了此功能)
提前致谢
使用内置 Django 信号时这是不可能的。信号上的“send()”和“send_robust()”方法返回一个二元组列表——(接收器,响应)。因此,如果您有正确的代码来处理来自每个接收器的响应,则您可能可以根据一个信号处理程序的返回值来阻止某些操作。
contrib.comments 应用程序执行此操作,允许任何返回 False 的接收器“取消”信号操作。参见第 111-120 行:
然而,发出 pre_delete、pre_save 等信号的核心 Django 代码没有任何这种特殊处理。所有这些信号的作用都是通知接收者发生了一些事情。
| 归档时间: |
|
| 查看次数: |
4526 次 |
| 最近记录: |