2016-08-20 41 views
-1

我在下面有这个modesl.py。我只需要在更新记录时才执行某些操作,而不是为Target模型创建记录(例如,当我通过admin更新Target.Name时)。到目前为止,下面的代码仅在创建新的目标记录时执行,而不是更新现有的记录。花了一整天的时间...仅当模型的现有记录正在更新时执行命令

高清create_badge(发件人,例如,创建,** kwargs):

if not created: 
    #execute stuff here if record being UPDATED 
    os.system('touch /tmp/mark') 
    pass 
else: 
    os.system('touch /tmp/mark2') 

类目标(models.Model):

Name = models.CharField(max_length=20) 
UID = models.CharField(max_length=15) 
SSH = models.CharField(max_length=400) 

信号。 post_save.connect(create_badge,sender = Target)

回答

0

在模型上使用自定义的save()方法。那么你可以利用这样的事实:当实例被修改时,它将已经有一个id,但是如果它正在被创建,它还不会(因为id是在第一次被保存时被分配的)。所以设置你的功能只有在已经有id的情况下才会被调用。例如:

class ModelName(models.Model): 
    ... 

    def save(self): 
     if self.id: 
      do_something_here() 
     super(ModelName, self).save() 
+0

看来,信号不工作时进行批量更新。我通过自定义管理操作触发了多个项目的更新。基本上我想通过管理员在批量更新后通过post_save触发命令... –

相关问题