J'ai lutté avec ce problème pendant 5 heures et j'ai l'impression que c'est une solution simple que je suis juste en train de négliger. J'essaie de lier un module tiers (Django Activity Stream) qui utilise une série d'expéditeurs et de récepteurs pour publier des données sur l'activité de l'utilisateur dans une table de base de données. Tout est configuré et installé correctement, mais j'obtiens une erreur 'Signal' Object has No Attribute 'Save'
lorsque j'essaie de l'exécuter. Je suspecte que le problème est dans ma syntaxe quelque part. Je ne fais que commencer avec les Signaux, alors je suis probablement en train de négliger quelque chose qu'un vétéran verra immédiatement.Erreur Django L'objet 'Signal' n'a pas d'attribut 'enregistrer'
En views.py
je:
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()
L'application Activity Django flux a ce fichier signals.py
:
from django.dispatch import Signal
action = Signal(providing_args=['actor','verb','target','description','timestamp'])
Et puis ce fichier 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")
Merci pour la réponse. Je pensais écrire cette application moi-même, mais j'ai ensuite trouvé ce que je pensais être un excellent raccourci. On dirait que je vais finir par l'écrire tout seul. Je suppose que c'est ce que j'ai pour essayer de couper les coins! Merci encore pour votre réponse claire. –