Как создать правильные уведомления с Django getstream? - PullRequest
1 голос
/ 27 октября 2019

Я создаю систему уведомлений с getstream.io в Django и работает хорошо, но в одной ситуации я не знаю, как правильно это сделать.

У меня есть Django и это приложение: https://github.com/GetStream/stream-django

Обычно я создаю уведомление, как в учебнике по ссылке выше, и это хорошо работает.

class Follow(models.Model, Activity):

@property
def activity_notify(self):
    return [feed_manager.get_notification_feed(self.target_user.id)]

Теперь мне нужно что-то сложное. У меня 3 модели.

class Goal(models.Model, Activity):
  title = models.CharField(max_length=255, verbose_name='Tytuł')
  image = models.ImageField(blank=True, verbose_name='Tło')
  body = HTMLField(verbose_name='Treść')
  votes = GenericRelation(LikeDislike, related_query_name='goalvotes')
  created_at = models.DateTimeField(auto_now_add=True)
  author = models.ForeignKey(User, on_delete=models.CASCADE)

class Joined(models.Model, Activity):
  goal = models.ForeignKey(Goal, on_delete=models.CASCADE, related_name='joined_goal')
  user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='joined_users')
  created_at = models.DateTimeField(auto_now_add=True)

и

class Comment(models.Model, Activity):
   body = models.TextField()
   created_at = models.DateTimeField(auto_now_add=True)
   author = models.ForeignKey(User, on_delete=CASCADE)

, и моя цель - отправить уведомление о новом комментарии в цель всем пользователям, которые уже присоединились к цели. Я пытаюсь что-то вроде этого:

@property
def activity_notify(self):
   return [feed_manager.get_notification_feed(Joined.user.id)]

Я знаю, что это неправильно, но у меня нет других идей, как это сделать. Может быть, у кого-то есть решение.

1 Ответ

0 голосов
/ 28 октября 2019

В вашей базе данных недостаточно информации для создания нужной целевой группы уведомлений. Вы должны добавить ссылку между Comment и Goal

class Comment(models.Model, Activity):
   goal = models.ForeignKey(Goal, on_delete=models.CASCADE)
   body = models.TextField()
   created_at = models.DateTimeField(auto_now_add=True)
   author = models.ForeignKey(User, on_delete=CASCADE)

Таким образом, теперь вы можете создать список пользователей, чтобы уведомлять, как это

@property
def activity_notify(self):
   user_ids = self.goal.joined_goal.values_list('id', flat=True).order_by('id')
   return map(feed_manager.get_notification_feed, user_ids[:100])

Отказ от ответственности: Iне проверял этот код, некоторые твики могут понадобиться

...