Удаление уведомления Django путем отключения сигнала в django-notifications-hq

#python #django #django-views #django-signals #django-notification

#python #django #django-просмотры #django-сигналы #django-уведомление

Вопрос:

Я намереваюсь удалить уведомление в пакете django-notifications-hq, отключив сигнал в моих представлениях после создания сигнала:

В качестве примера:

 def view1:
    notify.send(sender=user, recipient=other_user, verb=message, target=object)
    return redirect('app:page')

def view2:
    notify.disconnect(sender=user, reciever=other_user)
    return redirect('app:page2')
  

user и other_user — одни и те же пользователи в этом примере

Это отключит все сигналы между user и other_user , что я намерен сделать, это отключить только сигнал, созданный между этими пользователями для этого конкретного объекта.

Я уже просмотрел исходный код и не могу найти, как мне это сделать.

Для справки, ссылка на GitHub: https://github.com/django-notifications/django-notifications

Также это файл сигналов в этом пакете:

 ''' Django notifications signal file '''
# -*- coding: utf-8 -*-
from django.dispatch import Signal

notify = Signal(providing_args=[  # pylint: disable=invalid-name
    'recipient', 'actor', 'verb', 'action_object', 'target', 'description',
    'timestamp', 'level'
])
  

Редактировать

Вот более наглядный пример того, чего я пытаюсь достичь:

в моем app/views.py

У меня есть:

 def post_like(request, id):
  
   post = get_objects_or_404(Post, id=id)
   if request.user in post.likes:
      post.likes.remove(request.user)
      # remove notification sent to post.author here
   elif request.user not in post.likes:
      post.likes.add(request.user)
      notify.send(sender=request.user, recipient=post.author, verb="Liked your post", target = post)
      """
      Continue other functions here
      """
  

Как я могу подключить и отключить сигналы для этого представления? Я не могу найти пример в документации.

Редактировать

Я пытаюсь получить конкретное уведомление в соответствии с полем модели уведомлений:

 request.user.notifications.get(actor_content_type__model='Profile', actor_object_id=request.user.id, target_content_type__model='home.Post', target_object_id=post.id, recipient=post.author, verb=message)
  

Я получил сообщение об ошибке:

 raise self.model.DoesNotExist(
main.models.Notification.DoesNotExist: Notification matching query does not exist.
  

После проверки больше я заметил:

 AttributeError: 'Notification' object has no attribute 'actor_content_type__model'
  

Комментарии:

1. Ваш вопрос действительно должен касаться сигналов, а не уведомлений, но между тем, как и когда вызывается page2 или, скорее, view2.

2. Итак, как вы предлагаете мне отключать сигнал с этими определенными параметрами в любое время, на мой взгляд. View2 можно вызвать в любое время в любой точке моего приложения, я хочу иметь возможность удалять созданный сигнал с этими объектами в любое время. @unlockme

3. Посмотрите на это github.com/django-notifications /… информация # Уведомления лучше всего делать в отдельном сигнале. Таким образом, вы можете отключить этот обработчик. def my_handler(sender, instance, created, **kwargs): notify.send(instance, verb='was saved') request_finished.connect(my_handler), request_finished.disconnect(my_handler) Попробуйте это.

4. @unlockme спасибо за вашу информацию, но, к сожалению, я не могу этого сделать, я не могу найти способ отключить обработчик для конкретного аргумента уведомления. Я привел пример того, как я отправляю свои уведомления сейчас

5. Мне кажется, когда вы говорите отключить уведомление. Вы имеете в виду, что хотите, чтобы созданные уведомления не отображались для пользователя. Надеюсь, вы знаете, что notify.send фактически создает новый экземпляр уведомления в базе данных. В этом случае вы можете пометить конкретное уведомление как прочитанное. @ashes999