Я работаю над созданием приложения для уведомлений. Работает с использованием django сигналов. Всякий раз, когда создается новый экземпляр модели, я вызываю код, который создаст новый экземпляр моей модели уведомлений. Эти данные уведомлений затем фильтруются и отображаются на моей странице уведомлений. Теперь проблема заключается в том, что всякий раз, когда создается новый экземпляр модели, для самого создателя создается уведомление, что не имеет смысла. Поэтому я думаю, можно ли как-то передать параметр request.user в мой сигнал. Вот мой код для лучшей иллюстрации проблемы:
Вот моя модель уведомлений:
class Notifications(models.Model):
time = models.DateTimeField(auto_now=True)
target = models.ForeignKey(User , on_delete=models.CASCADE)
message = models.TextField()
object_type = models.CharField(max_length=100)
object_url = models.CharField(max_length=500,default = 'test')
is_read = models.BooleanField(default=False)
Вот мой сигнал, я думал добавить что-то вроде метода .exclude как показано ниже:
def CreateSalesTaskNotification(sender, **kwargs):
if kwargs['action'] == "post_add" and kwargs["model"] == SalesExtra:
print(kwargs['instance'].salesExtra.all())
for person in kwargs['instance'].salesExtra.all().exclude(user = request.user):
Notifications.objects.create(
target= person.user,
message='You have been assigned a task.',
object_type = 'sales_task')
m2m_changed.connect(CreateSalesTaskNotification, sender=SalesTask.salesExtra.through)
Вот моя модель SalesTask:
class SalesTaskingComments(models.Model):
comment_id = models.AutoField(primary_key=True)
salesExtras = models.ForeignKey('SalesExtra',on_delete=models.CASCADE)
salesTask= models.ForeignKey('SalesTask',on_delete=models.CASCADE)
comment = models.TextField(max_length=200 , default='your notes')
date_time = models.DateTimeField(auto_now=True)
def __str__(self):
return str(self.comment_id)
def get_absolute_url(self):
return reverse('task-details', kwargs={'pk':self.salesTask.task_id})
Не удивительно, что я столкнулся с ошибкой, заявив, что запрос не определен. Есть ли практическое решение этой проблемы?