【发布时间】:2010-12-11 01:50:02
【问题描述】:
我正在尝试在记录保存后立即更新它。这个例子可能看起来毫无意义,但假设我们需要在保存数据后使用 API 来获取一些额外的信息并更新记录:
def my_handler(sender, instance=False, **kwargs):
t = Test.objects.filter(id=instance.id)
t.blah = 'hello'
t.save()
class Test(models.Model):
title = models.CharField('title', max_length=200)
blah = models.CharField('blah', max_length=200)
post_save.connect(my_handler, sender=Test)
所以“额外”字段应该在每次保存后设置为“你好”。正确的?但它不起作用。
有什么想法吗?
【问题讨论】:
-
也许你可以描述它是如何不工作的?乍一看,它似乎会造成一个无限循环,因为 post_save 调用了 save,它应该调用 post_save 等。也许 Django 正在阻止递归?
-
我在那里看到了一个无限循环。在 t.save() 之后发送一个 post_save 信号,猜猜哪个函数被调用...
-
哦,我的印象是Django不会让第二次保存再次触发post_save?我猜不会。在这种情况下,你是对的。这将是一个无限循环。但我没有看到循环或任何东西。
-
这可能是一个愚蠢的问题,但是,您不能先调用 API 再保存吗?
-
你的意思是使用pre_save?我必须在模型级别执行此操作,因为我无法以任何方式为此项目修改 Django 管理员。
标签: python django django-models