Kullanıcıların etkinlik akışlarını kendi durumlarından oluşturmaya çalışıyorum.django - sinyaller çalışmıyor
modelleri: Yeni bir statü oluşturmak rağmen
Ancakclass 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)
, bu post_save
sinyalden yeni bir aktivite oluşturmaz.
sinyalleri: Yanlış yapıyorum
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)
? Lütfen bu problemi çözmeme yardım edin. Çok minnettar olacağım. Teşekkür ederim.
Güncelleme:
Ancak böyle yaparak aktiviteyi oluşturur:
@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
)
neden görünmüyor sonra yukarıdaki işler?
Merhaba. Cevabında yaptığın gibi yaptım. Ancak hala herhangi bir etkinlik oluşturmuyor. __init __. Py' içinde default_app_config = 'activity.apps.ActivityAppConfig' 'ifadesini ekledik. Ardından, "ActivityAppConfig" ad alanını "aktiviteler" olarak değiştirirken uygulamada yeni bir apps.py dosyası ekledik. Ve sonra 'dispatch_uid' ekleyin. – Kakar
Güncellenen cevaba bakınız. – catavaran
Evet! Şimdi çalışıyor. Bir şey daha. Her zaman apps.py oluşturarak sinyal almak zorunda mıyım? Neden onsuz çalışmıyor? – Kakar