Я боролся с этой проблемой в течение 5 часов, и у меня есть ощущение, что это простое решение, которое я просто просматриваю.Объект «Сигнал» Django не имеет атрибута «save»
Я пытаюсь связать сторонний модуль (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")
Спасибо за ответ. Я сам подумывал о написании этого приложения, но потом нашел то, что, по моему мнению, было отличным ярлыком. Похоже, я все равно напишу его самостоятельно. Наверное, это то, что я получаю от попыток срезать углы! Еще раз спасибо за ваш четкий ответ. –