2010-07-13 24 views
1

Je suis en train de créer une application qui notifie l'utilisateur lorsque le nouveau ThreadedComments apparaît. Pour cela, j'utilise le signal post_save. Voici mon models.py:Problème des signaux intégrés de Django: erreur lors de l'utilisation post_save

from django.db import models 
from django.contrib.auth.models import User 
from django.contrib.contenttypes.models import ContentType 
from django.contrib.contenttypes import generic 
from datetime import datetime 

from threadedcomments.models import ThreadedComment 
from django.db.models.signals import post_save 

from blog.models import Post 
from topics.models import Topic 

class BuzzEvent(models.Model): 
    user = models.ForeignKey(User) 
    time = models.DateTimeField(default=datetime.now) 

    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey() 

    def __unicode__(self): 
     return self.content_object 

def buzz_on_comment(sender, **kwargs): 
    # This is called when there is a new ThreadedComment 
    comment = kwargs['instance'] 

    user_attr_names = { 
        'post' : 'author', 
        'topic' : 'creator', 
        'tribe' : 'creator', 
       } 

    user = getattr(comment.content_object, 
        user_attr_names[comment.content_type.model]) 

    BuzzEvent.objects.create(content_object=sender, 
          user=user, 
          time=datetime.now()) 

post_save.connect(buzz_on_comment, sender=ThreadedComment) 

Le problème est quand un nouveau ThreadedComment est créé, je reçois une erreur: unbound method _get_pk_val() must be called with ThreadedComment instance as first argument (got nothing instead). Traceback et débogueur dit qu'il se produit lors de la création d'appels d'objet BuzzEvent signals.pre_init.send. Je suis incapable de pirater le code django en ce moment, y a-t-il une solution ou une idée évidente?

Répondre

1

On dirait qu'il devrait être par exemple le modèle (qui est comment) au lieu de classe modèle (qui est sender) comme argument content_object:

BuzzEvent.objects.create(content_object=comment, 
         user=user) 
+0

merci beaucoup, d.m! – martinthenext