【发布时间】:2010-08-31 09:09:47
【问题描述】:
我正在使用 Django 的 pre_save 信号来实现 auto_now_add。互联网上有很多关于为什么应该或不应该自己实现它的讨论。我不欣赏这方面的cmets。也不是我是否应该重写保存函数(我有很多使用 auto_now_add 的模型,所以使用信号是有意义的)。
我的问题是:
我想检查实例是否已创建或更新。根据互联网上的一些消息来源,这可以通过测试 kwargs['created'] 是否为 True 来完成。但是 'created' 不会出现在我的 kwargs 中,即使该实例是新创建的。
我只是想知道它是否曾经存在过,或者它已经神奇地消失了。
我知道我也可以测试是否设置了kwargs['instance'].id(这实际上对我有用),但我想知道 kwargs['created'] 是否仍然存在。
【问题讨论】:
-
要记住的一点是,如果设置了实例 id/pk 并不一定意味着该对象存在于数据库中。一个常见的例子是,如果这些实例是从 fixtures 加载的。
-
@Botondus:有没有更好的方法(避免你提到的问题)来检查实例是新创建的还是在 pre_save 期间更新?
-
是的,如果设置了 PK,您实际上必须查询数据库以确定是否已创建实例。类似于: MyModel.objects.filter(pk=pk_val).exists() 它实际上在 Django 内部以类似的方式实现:code.djangoproject.com/browser/django/trunk/django/db/models/…
-
感谢您的提示!我已将它包含在我的代码中,并将在以后的项目中记住这一点。
标签: python django keyword-argument