在Django中创建模型时执行代码

在Django中创建模型时执行代码,django,django-models,Django,Django Models,我想在Django模型首次创建时在其中执行一些代码。之后,每当它被保存,我想执行一些其他代码。第二个任务可以通过重写save()方法轻松完成。 如何完成第一项任务?您可以使用“: #models.py 从django.db.models导入信号 类MyModel(models.Model): 通过 def my_model_post_save(发件人、实例、已创建、*args、**kwargs): 参数说明: sender-模型类。(MyModel) 实例-正在保存的实际实例。 created-

我想在Django模型首次创建时在其中执行一些代码。之后,每当它被保存,我想执行一些其他代码。第二个任务可以通过重写save()方法轻松完成。 如何完成第一项任务?

您可以使用“:

#models.py
从django.db.models导入信号
类MyModel(models.Model):
通过
def my_model_post_save(发件人、实例、已创建、*args、**kwargs):
参数说明:
sender-模型类。(MyModel)
实例-正在保存的实际实例。
created-布尔值;如果创建了新记录,则为True。
*args,**kwargs-捕获不需要的'raw'和'using`(1.3)参数。
"""
如果创建:
#你的密码在这里
#django 1.3+
从django.dispatch导入调度程序
dispatcher.connect(my_model_post_save,signal=signals.post_save,sender=MyModel)
#django通过使用
receiver
decorator扩展:

from django.db import models
from django.dispatch import receiver

class MyModel(models.Model):
    pass

@receiver(models.signals.post_save, sender=MyModel)
def execute_after_save(sender, instance, created, *args, **kwargs):
    if created:
        # code

字段的默认值。这可以是值或可调用的对象。如果可调用,则每次创建新对象时都会调用它


所以,我们可以使用任何可调用的字段在创建时执行我们想要的操作,嗯?;-)

我试过了,但出现了一个错误。事实证明,我使用的是Django版本(1,1,1,'final',0),这只适用于Django 1.3及以上版本。我会尝试升级,但你知道其他方法吗?谢谢@罗希特:1.1.1中的错误是什么?这些信号存在于1.1.1中,设置可能有点不同,或者我输入了一个错误。@RohitAgarwal:我浏览了旧文档,并更新了我的示例底部的1.1.1应该适用的内容。
AttributeError:'module'对象没有属性“connect”
。然后我尝试使用receiver decorator(),但我得到了
ImportError:cannotimport name receiver
是的,在1.3中添加了通过dispatcher模块设置信号。您需要使用底部显示的
signals.post_save.connect
进行连接。这是django 1.10现在的工作原理,而不是公认的答案,该答案对于早期版本可能是正确的。
from django.db import models
from django.dispatch import receiver

class MyModel(models.Model):
    pass

@receiver(models.signals.post_save, sender=MyModel)
def execute_after_save(sender, instance, created, *args, **kwargs):
    if created:
        # code