关于 post_save 信号和 created 参数

Posted

技术标签:

【中文标题】关于 post_save 信号和 created 参数【英文标题】:about the post_save signal and created argument 【发布时间】:2011-01-24 20:18:33 【问题描述】:

docs 说:

post_save
django.db.models.signals.post_save

created
A boolean; True if a -new- record was create.

我有这个:

from django.db.models.signals import post_save
def handle_new_user(sender, instance, created, **kwargs):
    print "--------> save() "+str(created)
post_save.connect(handle_new_user, sender=User)

当我在 shell 中做时:

u = User(username="cat")
u.save()
>>> --------> save() True
u.username = "dog"
u.save()
>>> --------> save() True

当我第二次 save() 时,我希望 >>> --------> save() False 因为是更新?不是吗?

【问题讨论】:

你使用的是什么版本的 Django?当我在 1.1 上使用完全相同的代码时,它工作得非常好。 【参考方案1】:

好像你已经实现了自己的用户,它对用户名没有唯一约束?

【讨论】:

我正在实现“从 django.contrib.auth.models 导入用户”【参考方案2】:

我建议你使用User.objects.create_user 来避免批量操作。

【讨论】:

以上是关于关于 post_save 信号和 created 参数的主要内容,如果未能解决你的问题,请参考以下文章

Django post_save() 信号实现

忽略 django 的 post_save 信号中对 m2m 关系的更改

未调用 post_save 信号

Django 从 post_save 信号访问 ManyToMany 字段

Django post_save 信号和 celery 任务之间可能的竞争条件

识别 django post_save 信号中更改的字段