2016-08-20 6 views
-1

私はこのモードを以下に示します。レコードが更新され、ターゲットモデル用に作成されていない場合(たとえば、Target.Nameをadminで更新する場合など)にのみ、何かを実行する必要があります。これまでのところ、以下のコードは新しいターゲットレコードを作成し、既存のレコードを更新しない場合にのみ実行されます。モデルの既存のレコードが更新されている場合にのみコマンドを実行します。

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) 

信号DEF(送信者、例えば、作成、** kwargsから)をcreate_badge

...これで一日を過ごしました。 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

一括更新を実行すると信号が動作しないようです。私はカスタム管理アクションを介して複数のアイテムに対して更新を引き起こしました。基本的に私はadmin経由で一括更新後にpost_saveの後にコマンドを起動したかった... –

関連する問題