urls tutorial httpresponseredirect example django django-signals

tutorial - django-las señales no funcionan



httpresponseredirect django example (2)

Parece que tu post_save.connect no se ejecuta. Deberías importar signals algún lugar. Para django 1.7, se recomienda hacer esto en la función config ready () de la aplicación. Lea el "¿Dónde debería vivir este código?" Nota al margen en los documentos.

Por ejemplo, si tu aplicación se llama activity :

actividad / __ init__.py

default_app_config = ''activity.apps.ActivityAppConfig''

actividad / apps.py

from django.apps import AppConfig class ActivityAppConfig(AppConfig): name = ''activity'' def ready(self): import activity.signals

Y no olvide agregar dispatch_uid a su llamada connect() :

post_save.connect(create_activity_item, sender=Status, dispatch_uid="create_activity_item")

ACTUALIZACIÓN : el atributo de name de ContentType siempre está en minúscula. Así que deberías cambiar la sentencia if a:

if ctype.name == ''status'':

Estoy tratando de crear flujos de actividad de los usuarios a partir de su estado.

modelos:

class Status(models.Model): body = models.TextField(max_length=200) image = models.ImageField(blank=True, null=True, upload_to=get_upload_file_name) privacy = models.CharField(max_length=1,choices=PRIVACY, default=''F'') pub_date = models.DateTimeField(auto_now_add=True, auto_now=False) user = models.ForeignKey(User) class Activity(models.Model): actor = models.ForeignKey(User) action = models.CharField(max_length=100) content_type = models.ForeignKey(ContentType) object_id = models.PositiveIntegerField() content_object = generic.GenericForeignKey(''content_type'', ''object_id'') pub_date = models.DateTimeField(auto_now_add=True, auto_now=False)

Sin embargo, aunque creo un nuevo estado, no crea una nueva actividad a partir de la señal post_save .

señales:

from django.contrib.contenttypes.models import ContentType from django.db.models.signals import post_save from status.models import Status from models import Activity def create_activity_item(sender, instance, signal, *args, **kwargs): if kwargs.get(''created'', True): ctype = ContentType.objects.get_for_model(instance) if ctype.name == ''Status'': action = '' shared '' activity = Activity.objects.get_or_create( actor = instance.user, action = action, content_type = ctype, object_id = instance.id, pub_date = instance.pubdate ) post_save.connect(create_activity_item, sender=Status)

¿Qué estoy haciendo mal? Por favor ayudame a resolver este problema. Estaré muy agradecido. Gracias.

Actualizar:

Sin embargo haciendo esto crea la actividad:

@receiver(post_save, sender=Status) def create(sender, instance, **kwargs): if kwargs.get(''created'',True): ctype = ContentType.objects.get_for_model(instance) activity = Activity.objects.get_or_create( actor = instance.user, action = '' shared '', content_type = ctype, object_id = instance.id, pub_date = instance.pub_date )

¿Por qué no funciona lo anterior, entonces?


Sin tocar apps.py esto me funcionó.

class MyModel(models.Model): """ MyModel fields go """ body = models.TextField(max_length=200) pub_date = models.DateTimeField(auto_now_add=True, auto_now=False) def post_save_actions(sender, instance, created, **kwargs): if created: # post save actions if new instance is created, # do something with `instance` or another models # be careful about circular imports. /m/

y las señales enganchan,

post_save.connect(post_save_user_actions, sender=MyModel)