сигналы django не работают должным образом

Я пытаюсь создать проект для создания ленты/ленты активности пользователя с помощью блог.

эти модели -

class StreamItem(models.Model):
    user = models.ForeignKey(User)
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    pub_date = models.DateTimeField(default=datetime.now)
    content_object = generic.GenericForeignKey('content_type', 'object_id')

    @property 
    def content_class(self):
        return self.content_type.model


class Blog(models.Model):
    user = models.ForeignKey(User)
    title = models.CharField(max_length=300)
    body = models.TextField()
    pub_date = models.DateTimeField(default=datetime.now)


class Photo(models.Model):
    user = models.ForeignKey(User)
    title = models.CharField(max_length=200)
    image = models.ImageField(upload_to=get_upload_file_name)
    pub_date = models.DateTimeField(default=datetime.now)

и это signals.py:

__init__.py
from django.db.models import signals
from django.contrib.contenttypes.models import ContentType
from django.dispatch import dispatcher
from blogs.models import Blog
from picture.models import Photo
from models import StreamItem

def create_stream_item(sender, instance, signal, *args, **kwargs):

    # Check to see if the object was just created for the first time

    if 'created' in kwargs:
        if kwargs['created']:
            create = True

            # Get the instance's content type

            ctype = ContentType.object.get_for_model(instance)

            if create:
                si = StreamItem.objects.get_or_create(user=instance.user, content_type=ctype, object_id=instance.id, pub_date = instance.pub_date)

 # Send a signal on post_save for each of these models

for modelname in [Blog, Photo]:
    dispatcher.connect(create_stream_item, signal=signals.post_save, sender=modelname)

когда я создаю блог или загружаю фотографию,signal не работает. И я не получаю никаких ошибок. Но я могу вручную добавить элементы StreamItem приложение с помощью администратора, и StreamItem работает так, как я хочу. Я думаю, что есть проблема с в signals.py - ... Пожалуйста, помоги мне. Буду очень признателен. Спасибо.

2 ответов


вы должны убедиться, что сигналы загружаются вскоре после запуска django. Единственный возможный способ обеспечить это-импортировать модуль в __init__.py

# __init__.py
# add the below line and run the project again
import signals

Если вы не опустили код, новый si элемент, который создает обработчик сигнала, отсутствует в требуемом поле user. Вероятно, вам нужно добавить это к вашему get_or_create звонок.