Я боролся с этой проблемой в течение 5 часов, и мне кажется, что это простое решение, которое я просто пропускаю.
Я пытаюсь подключить сторонний модуль ( Django Activity Stream ), который использует серию отправителей и получателей для публикации данных об активности пользователя в таблице базы данных.Все настроено и установлено правильно, но я получаю ошибку 'Signal' Object has No Attribute 'Save'
при попытке запустить его.
Я подозреваю, что проблема в моем синтаксисе где-то.Я только начинаю работать с сигналами, поэтому, вероятно, пропускаю то, что ветеран сразу заметит.
В 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")