2013-11-28 3 views
7

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이 작동하지 않습니다. 그리고 나는 어떤 오류도 일어나지 않고있다. 하지만 관리자를 사용하여 StreamItem 앱에 항목을 수동으로 추가 할 수 있으며 원하는대로 StreamItem이 작동합니다. 나는 signals.py에 문제가 있다고 생각한다. 제발 도와주세요. 많이 감사 할 것입니다. 고맙습니다.

답변

11

django가 시작된 직후 신호가로드되는지 확인해야합니다. 을 보장 할 수있는 한 가지 방법은 답변을 주셔서 감사합니다, __init__.py

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

안녕하세요. signals.py에'__init __. py'를 추가했습니다. 하지만 지금은 그것이 작동하지 않습니다. 오류를 확인하기 위해 어쨌든 있습니까? – Aamu

+0

그건 그렇고,'import signal '을'__init __. py' 파일에 넣어야합니까? 또는'__init __. py'를'signals.py' 파일에 넣으시겠습니까? – Aamu

+0

@Aamu 앱 모듈에서는 django가로드 될 때 확실히로드되는'__init __. py'를 갖게됩니다. 그래서 – Surya

0

코드를 생략하지 않으면 신호 처리기에서 새로 작성한 si 항목에 필수 입력란 user이 누락되었습니다. 전화 번호 get_or_create에이 번호를 추가해야 할 수 있습니다.

+0

안녕에 모듈을 가져 오는 것입니다. 그리고 네, 저는 사용자를 추가하지 않았습니다. 하지만 이제는 추가 한 후에도 새로운 스트림 항목이 생성되지 않습니다. – Aamu

관련 문제