m2m_changed не срабатывает при изменении одной стороны отношения m2m - PullRequest
0 голосов
/ 05 января 2020

Извините, я новичок в django, простите, если это глупая ошибка. В настоящее время я пытаюсь построить систему уведомлений, используя сигналы django, однако я столкнулся с проблемой необходимости запроса отношения m2m. Чтобы проиллюстрировать проблему, вот мой код.

Это моя модель уведомлений.

class Notifications(models.Model):
notifications_id = models.AutoField(primary_key=True)
user = models.ForeignKey(User,on_delete=models.CASCADE,default=1)
time = models.DateTimeField(auto_now=True)
message = models.TextField(max_length=100 ,default ='test')
object_url = models.CharField(max_length=500, default ='test')
is_read = models.BooleanField(default=False)

Это моя модель задачи:

class SalesTask(models.Model):
sales_status= (
    ('p1','Phase 1'),
    ('p2','Phase 2'),
    ('p3','Phase 3'),
    ('p4','Phase 4'),
)
sales_priority= (
    ('Urgent','Urgent'),
    ('Medium','Medium'),
    ('Low','Low'),
)
task_id = models.AutoField(primary_key=True)
salesExtra= models.ManyToManyField('SalesExtra')
sales_project= models.ForeignKey('SalesProject',on_delete=models.CASCADE)
title = models.TextField(max_length=50 , default='Your Title' )
description = models.TextField(max_length=200 , default='Your Description' )
priority = models.TextField(max_length=10 , choices= sales_priority ,default='Low' )
date_time = models.DateTimeField(auto_now=True)
status = models.TextField(max_length=10, choices= sales_status ,default='p1')
due_date = models.DateTimeField(default=timezone.now)

Это моя обработчик сигнала:

def CreateTaskNotification(sender,**kwargs):    
print(kwargs['instance'].all())
for i in range(len(kwargs['instance'].all())):
    notification = Notifications.objects.create(user = kwargs['instance'].salesExtra.username[i],
                                                message = 'You have been assigned a new task',
                                                object_url = kwargs['instance'].get_absolute_url(self)
                                                    )

m2m_changed.connect(CreateTaskNotification,sender=SalesTask)

Я проверил, и мой сигнал действительно не срабатывает при создании нового экземпляра модели SalesExtra.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...