Sto provando a creare flussi di attività degli utenti dal loro stato.django - segnali non funzionanti
modelli:
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)
Tuttavia, anche se creo un nuovo status, ma non crea una nuova attività dal segnale post_save
.
segnali:
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)
Che cosa sto facendo di sbagliato? Per favore aiutami a risolvere questo problema. Sarò molto grato. Grazie.
Aggiornamento:
Tuttavia facendo in questo modo crea l'attività:
@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
)
Perché non lo fa le opere di cui sopra, allora?
ciao. Ho fatto come hai fatto nella risposta. Ma non sta ancora creando alcuna attività. Nel file '__init __. Py' ho aggiunto' default_app_config = 'activities.apps.ActivityAppConfig'' come attività è il nome dell'app. E poi ha aggiunto un nuovo file apps.py nell'app mentre cambiava il campo del nome di "ActivityAppConfig" in "attività". E poi aggiungi 'dispatch_uid'. – Kakar
Vedere la risposta aggiornata. – catavaran
Sì! Ora sta funzionando. Un'altra cosa. Devo sempre importare i segnali creando apps.py? Perché non funziona senza di esso? – Kakar