2017-01-08 8 views
2

私のプロジェクトでdjango-notificationsを使用しています。モデルを作成するたびに特定のユーザに通知したいのですが、モデルが存在するときにpost_saveも実行されます。私はこれを防止し、モデルの作成時にpost_saveメソッドを実行するだけです。add作成するときにdjango post_saveシグナルを実行する方法

models.py

class Card(models.Model): 
    user = models.ForeignKey(User,on_delete=models.CASCADE) 
    title = models.CharField(max_length=100) 
    description = models.TextField(blank=True) 
    list = models.ForeignKey(List, related_name='cards') 
    story_points = models.IntegerField(null=True, blank=True) 
    business_value = models.IntegerField(null=True, blank=True) 

    def __str__(self): 
     return "Card: {}".format(self.title) 

def my_handler(sender, instance, **kwargs): 
    if instance.pk is None: 
     notify.send(instance.user, recipient=User.objects.get(pk=1), target=instance, verb='created') 

post_save.connect(my_handler, sender=Card)  

instance.pkがNone場合、私は使用してみましたが、私はこの条件を追加するとき、それはまったく実行されません。

EDITED:コードチェック

def my_handler(sender, instance, created, **kwargs): 
    if created: 
     notify.send(instance.user, recipient=User.objects.get(pk=1), target=instance, verb='created') 

答えて

2

を作成した場合、それは新しいオブジェクトの場合はtrueに設定されます作成した名前付き引数があります。

はこちらをご覧 - https://docs.djangoproject.com/en/1.10/ref/signals/#post-save

def my_func(sender, instance, created, **kwargs): 
    print("Created: ", created) 

class MyModel(models.Model): 
    x = models.CharField(max_length=255) 

post_save.connect(my_func, sender=MyModel) 

>>> MyModel.objects.create(f='asdf') 
Created: True 
>>> m = MyModel.objects.all().first() 
>>> m.x 
'asdf' 
>>> m.x = 'a' 
>>> m.save() 
Created: False 
+0

私はすでに試みたが、それはまだ私はモデルがこれを実行するコードを追加します – HackAfro

+0

更新したときに送信します。 – utkbansal

+0

質問にそのコードを追加しました。 – HackAfro

関連する問題