在Django中执行模型创建代码

Roh*_*wal 10 django django-models

我想在Django模型首次创建时执行一些代码.之后,只要保存,我想执行其他一些代码.通过覆盖save()方法可以轻松完成第二个任务.我该如何完成第一项任务?

Tom*_*cek 28

使用装饰器扩展sdolan答案receiver:

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
Run Code Online (Sandbox Code Playgroud)

  • 这是现在使用django 1.10,而不是可接受的答案,这可能是早期版本的正确. (2认同)

Sam*_*lan 12

你可以使用django信号 ' post_save:

# models.py

from django.db.models import signals

class MyModel(models.Model):
    pass

def my_model_post_save(sender, instance, created, *args, **kwargs):
    """Argument explanation:

       sender - The model class. (MyModel)
       instance - The actual instance being saved.
       created - Boolean; True if a new record was created.

       *args, **kwargs - Capture the unneeded `raw` and `using`(1.3) arguments.
    """
    if created:
        # your code goes here


# django 1.3+
from django.dispatch import dispatcher
dispatcher.connect(my_model_post_save, signal=signals.post_save, sender=MyModel)

# django <1.3
from django.db.models.signals import post_save
post_save.connect(my_model_post_save, sender=MyModel)
Run Code Online (Sandbox Code Playgroud)

  • 是的,在1.3中添加了通过调度程序模块设置信号.您需要使用底部显示的`signals.post_save.connect`进行连接. (2认同)