【问题标题】:How can I run some code when a Django model’s save method is called for the first time?第一次调用 Django 模型的保存方法时如何运行一些代码?
【发布时间】:2012-01-18 20:11:45
【问题描述】:

我本可以发誓我以前读过一个关于这个的问题,但我找不到它,所以:

在 Django 中,如何在将新模型实例保存到数据库时运行一些代码?

我知道我可以编写一个自定义的MyModel().save() 方法来在保存模型实例时运行一些代码。但是如何仅在第一次保存模型实例时运行代码?

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    一开始我很难理解 Django 文档,这里有一个更明确的例子

    from django.db.models.signals import post_save
    from yourapp.models import YourModel
    
    def model_created(sender, **kwargs):
        the_instance = kwargs['instance']
        if kwargs['created']:
            do_some_stuff(the_instance)
    
    post_save.connect(model_created, sender=YourModel)
    

    【讨论】:

    • 嗯。我从来没有非常喜欢信号(远处的怪异动作)。另外 - 有两种非常不同的方法来做到这一点很特别 - 手头上覆盖 save() 和另一个信号。
    • model_created 定义中缺少“:”
    【解决方案2】:

    是的:the post_save signal 传递了一个名为 created 的参数,如果它的实例是通过对 save() 的调用创建的,那么它就是 True

    【讨论】:

    • 您还可以检查 self.pk 是否存在于 save 方法中 - 通常我会根据复杂性做出选择。例如,在 auto_now_add 存在之前设置时间戳 :)
    猜你喜欢
    • 2015-11-15
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多