blogの助けを借りてユーザーのフィード/アクティビティフィードを作成するプロジェクトを作成しようとしています。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
は動作しません。そして、私はあまりにもエラーを取得していません。しかし、私はadminを使用してStreamItem
アプリにアイテムを手動で追加することができます。また、StreamItemは機能します。私はsignals.pyに問題があると思う。私を助けてください。大いに感謝するだろう。ありがとうございました。
こんにちは。 signals.pyに '__init __。py'を追加しました。しかし、今でもそれは動作しません。とにかくエラーをチェックするには? – Aamu
ところで、 '__init __。py'ファイルに' import signals'を置かなければなりません。あるいは '__init __。py'を' signals.py'ファイルに置きますか? – Aamu
@Aamu appモジュールでは、djangoが読み込まれたときに確実に読み込まれる '__init __。py'があります。ですから、 – Surya