我已经为这个问题苦苦挣扎了 5 个小时,我觉得这是一个简单的解决方案,我只是忽略了。
我正在尝试绑定第三方模块(Django Activity Stream),该模块使用一系列发送者和接收者将有关用户活动的数据发布到数据库表中。一切都已正确设置和安装,但是'Signal' Object has No Attribute 'Save'
当我尝试运行它时出现错误。
我怀疑问题出在我的语法中。我刚刚开始使用 Signals,所以我可能忽略了一些老手会立即发现的东西。
在views.py
我有:
from django.db.models.signals import pre_save
from actstream import action ##This is the third-party app
from models import Bird
def my_handler(sender, **kwargs):
action.save(sender, verb='was saved')
#return HttpResponse("Working Great")
pre_save.connect(my_handler, sender=Bird)
def animal(request):
animal = Bird()
animal.name = "Douglas"
animal.save()
Django Activity Stream 应用程序有这个signals.py
文件:
from django.dispatch import Signal
action = Signal(providing_args=['actor','verb','target','description','timestamp'])
然后这个models.py
文件:
from datetime import datetime
from operator import or_
from django.db import models
from django.db.models.query import QuerySet
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from django.utils.timesince import timesince as timesince_
from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import User
from actstream import action
...
def action_handler(verb, target=None, **kwargs):
actor = kwargs.pop('sender')
kwargs.pop('signal', None)
action = Action(actor_content_type=ContentType.objects.get_for_model(actor),
actor_object_id=actor.pk,
verb=unicode(verb),
public=bool(kwargs.pop('public', True)),
description=kwargs.pop('description', None),
timestamp=kwargs.pop('timestamp', datetime.now()))
if target:
action.target_object_id=target.pk
action.target_content_type=ContentType.objects.get_for_model(target)
action.save()
action.connect(action_handler, dispatch_uid="actstream.models")