GetStream (Django) - 无法丰富通知提要
GetStream (Django) - Cannot Enrich Notification Feed
我正在使用GetStream Django package to interact with getstream.io。我已经成功地使用 Enricher()
class 来丰富我的 activity 提要,其中包含 feed_manager.get_user_feed()
的 Django 模型信息,但无法使用 feed_manager.get_notification_feed()
[= 获得类似的结果23=]
这是我的模型的简化版本。
class Task(models.Model, Activity):
title = models.CharField()
assigned_to = models.ForeignKey(User)
created_at = models.DateTimeField(auto_now_add=True)
created_by = models.ForeignKey(User)
@property
def activity_object_attr(self):
return self
@property
def activity_actor_attr(self):
return self.assigned_to
@property
def activity_notify(self):
return [feed_manager.get_notification_feed(self.assigned_to.id),]
如果我的视图抓住了用户提要:
enricher = Enrich()
feed = feed_manager.get_user_feed(request.user.id)
# feed = feed_manager.get_notification_feed(request.user.id)
activities = feed.get(limit=25)['results']
enriched_activities = enricher.enrich_activities(activities)
我的输出按预期工作,并且每个输出都在我的模板中填充了正确的数据:
Actor: {{ activity.actor }}<br>
Title: {{ activity.title }}<br>
Time: {{ activity.time|timesince }}<br>
但是,如果我切换到通知提要(注意注释行的变化):
enricher = Enrich()
# feed = feed_manager.get_user_feed(request.user.id)
feed = feed_manager.get_notification_feed(request.user.id)
activities = feed.get(limit=25)['results']
enriched_activities = enricher.enrich_activities(activities)
那么,我唯一可以从中获取数据的字段是 activity.created_at
。
activity.keys
的输出显示如下:
[u'activities', u'group', u'activity_count', u'created_at', u'updated_at', u'actor_count', u'verb', u'is_seen', u'id', u'is_read']
似乎对于通知提要,演员和对象没有被报告回 GetStream:
但是,它用于用户供稿:
我不知道为什么。我错过了什么?
好的...所以我弄清楚了我的错误。我一直在假设 notification_feed
是固定进给的情况下操作。糟糕,糟糕。它实际上是聚合的。因此,我能够进行如下修复:
而不是:
activities = enricher.enrich_activities(activities)
我用过:
enriched_activities = enricher.enrich_aggregated_activities(activities)
然后,在我的基本模板中:
{% for enriched_activity in enriched_activities %}
{% render_activity enriched_activity %}
{% endfor %}
在/activity/aggregated/task.html
中查找
{% for activity in enriched_activity.activities %}
{% render_activity activity %}
{% endfor %}
最后在 /activity/task.html 中,我看到了这些项目的预期输出。
Actor: {{ activity.actor.first_name }}<br>
Title: {{ activity.object.title }}<br>
Time: {{ activity.time|timesince }}<br>
我正在使用GetStream Django package to interact with getstream.io。我已经成功地使用 Enricher()
class 来丰富我的 activity 提要,其中包含 feed_manager.get_user_feed()
的 Django 模型信息,但无法使用 feed_manager.get_notification_feed()
[= 获得类似的结果23=]
这是我的模型的简化版本。
class Task(models.Model, Activity):
title = models.CharField()
assigned_to = models.ForeignKey(User)
created_at = models.DateTimeField(auto_now_add=True)
created_by = models.ForeignKey(User)
@property
def activity_object_attr(self):
return self
@property
def activity_actor_attr(self):
return self.assigned_to
@property
def activity_notify(self):
return [feed_manager.get_notification_feed(self.assigned_to.id),]
如果我的视图抓住了用户提要:
enricher = Enrich()
feed = feed_manager.get_user_feed(request.user.id)
# feed = feed_manager.get_notification_feed(request.user.id)
activities = feed.get(limit=25)['results']
enriched_activities = enricher.enrich_activities(activities)
我的输出按预期工作,并且每个输出都在我的模板中填充了正确的数据:
Actor: {{ activity.actor }}<br>
Title: {{ activity.title }}<br>
Time: {{ activity.time|timesince }}<br>
但是,如果我切换到通知提要(注意注释行的变化):
enricher = Enrich()
# feed = feed_manager.get_user_feed(request.user.id)
feed = feed_manager.get_notification_feed(request.user.id)
activities = feed.get(limit=25)['results']
enriched_activities = enricher.enrich_activities(activities)
那么,我唯一可以从中获取数据的字段是 activity.created_at
。
activity.keys
的输出显示如下:
[u'activities', u'group', u'activity_count', u'created_at', u'updated_at', u'actor_count', u'verb', u'is_seen', u'id', u'is_read']
似乎对于通知提要,演员和对象没有被报告回 GetStream:
但是,它用于用户供稿:
我不知道为什么。我错过了什么?
好的...所以我弄清楚了我的错误。我一直在假设 notification_feed
是固定进给的情况下操作。糟糕,糟糕。它实际上是聚合的。因此,我能够进行如下修复:
而不是:
activities = enricher.enrich_activities(activities)
我用过:
enriched_activities = enricher.enrich_aggregated_activities(activities)
然后,在我的基本模板中:
{% for enriched_activity in enriched_activities %}
{% render_activity enriched_activity %}
{% endfor %}
在/activity/aggregated/task.html
中查找{% for activity in enriched_activity.activities %}
{% render_activity activity %}
{% endfor %}
最后在 /activity/task.html 中,我看到了这些项目的预期输出。
Actor: {{ activity.actor.first_name }}<br>
Title: {{ activity.object.title }}<br>
Time: {{ activity.time|timesince }}<br>