Извините, я новичок в 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.