我刚刚设置了django-activity-stream但是在我转到内置模板mysite.com/activity/时无法显示我的动作。然而,如果我检查管理站点,我可以看到操作已按预期保存。我正在使用django-allauth进行身份验证/授权
的myapp / Settings.py
ACTSTREAM_SETTINGS = {
'MODELS': ('auth.user', 'auth.group'),
'MANAGER': 'actstream.managers.ActionManager',
'FETCH_RELATIONS': True,
'USE_PREFETCH': True,
'USE_JSONFIELD': True,
'GFK_FETCH_DEPTH': 0,
}
的myapp / receivers.py
from actstream import action
@receiver(user_logged_in)
def handle_user_logged_in(sender, **kwargs):
request = kwargs.get("request")
user = kwargs['user']
action.send(user, verb='logged in')
在django-activity-stream views.py
中,似乎models.user_stream(request.user)
返回空。但我不明白为什么。
actstream / views.py
@login_required
def stream(request):
"""
Index page for authenticated user's activity stream. (Eg: Your feed at
github.com)
"""
return render_to_response(('actstream/actor.html', 'activity/actor.html'), {
'ctype': ContentType.objects.get_for_model(User),
'actor': request.user, 'action_list': models.user_stream(request.user)
}, context_instance=RequestContext(request))
从models.userstream(request.user)
进行调试似乎我发现它没有返回结果:
actstream / managers.py
@stream
def user(self, object, **kwargs):
"""
Stream of most recent actions by objects that the passed User object is
following.
"""
q = Q()
qs = self.filter(public=True)
actors_by_content_type = defaultdict(lambda: [])
others_by_content_type = defaultdict(lambda: [])
follow_gfks = get_model('actstream', 'follow').objects.filter(
user=object).values_list('content_type_id',
'object_id', 'actor_only')
if not follow_gfks:
return qs.none()
当我检查q = self.filter
处的值时,我实际上可以看到我通过的用户所有正确的“登录”活动,但是当它到达follow_gfks = get_model
时因为有问题的用户不是跟随其他任何人follow_gfks
最终成为无,并在最后一行删除查询集qs
。
为什么当我只是试图查看我自己的用户活动Feed时,这种方式是这样的,我不知道。
以下是我的actstream_action表中的一行:
id 1
actor_content_type_id [fk]3
actor_object_id 2
verb logged in
description NULL
target_content_type_id NULL
target_object_id NULL
action_object_content_type_id NULL
action_object_object_id NULL
timestamp 2013-09-28 12:58:41.499694+00
public TRUE
data NULL
答案 0 :(得分:1)
我设法通过将user
传递给actor_stream()
而不是user_stream()
来获取当前登录用户的操作/活动列表。但我不知道为什么user_stream
不能按预期工作
答案 1 :(得分:0)
如果您的用户想要显示操作,则需要将with_user_activity=True
传递给user_stream
;如果是另一个用户,则需要先关注它们。