2017-01-08 10 views
2

Я использую django-уведомления в моем проекте, и я хочу уведомлять конкретного пользователя всякий раз, когда модель создается с использованием сигнала, но post_save также работает, когда модель обновлено, как я могу это предотвратить, и только создайте метод post_save, когда создается модель.addHow, чтобы сделать 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 его нет, но когда я добавляю это условие не работает вообще.

Редакция: Код проверка, если создан

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

ответ

2

Там является созданным по имени аргумент, который будет установлен Правда, если это новый объект.

Посмотрите здесь - 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