使用Django中的信号创建Feed [英] Creting feed using signals in Django

查看:132
本文介绍了使用Django中的信号创建Feed的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这里我已经定义了一个模型来在'models.py'中创建一个feed实例:

  class StreamItem(models。模型):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
pub_date = models.DateTimeField()

content_object = generic.GenericForeignKey ('content_type','object_id')

def get_rendered_html(self):
template_name ='streams / stream_item_%s.html'%(self.content_type.name)
return render_to_string(template_name,{'object':self.content_object})

def create_stream_item(sender,instance,signal,* args,** kwargs):
#检查对象刚刚创建了
如果在kwargs中创建了
如果kwargs ['created']:
create = True

#获取实例的内容类型
ctype = ContentType.objects.get_for_model(实例)

pub _date = instance.pub_date

如果创建:
si = StreamItem.objects.get_or_create(content_type = ctype,object_id = instance.id,pub_date = pub_date)

#在[Fest,College,Event]中为每个这些模型发送一个post_save信号
作为模型名:
my_signal = dispatch.Signal()
my_signal.connect(create_stream_item,sender = modelname )

然后我创建了获取Feed的视图,只要我创建了 StreamItem 对象。但是,信号部分不仅仅是工作。我只是在了解它,所以我不明白我在哪里错了。请帮助。

解决方案

使用 post_save 信号:

  from django.db.models.signals import post_save 

for [Fest,College,Event]:
post_save.connect(create_stream_item,sender = model)


Here i have defined a model to create a feed instance in 'models.py':

class StreamItem(models.Model):
  content_type = models.ForeignKey(ContentType)
  object_id = models.PositiveIntegerField()
  pub_date = models.DateTimeField()

  content_object = generic.GenericForeignKey('content_type', 'object_id')

  def get_rendered_html(self):
    template_name = 'streams/stream_item_%s.html' % (self.content_type.name)
    return render_to_string(template_name, { 'object': self.content_object })

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.objects.get_for_model(instance)

            pub_date = instance.pub_date

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

# Send a signal on post_save for each of these models
for modelname in [Fest, College, Event]: 
    my_signal = dispatch.Signal()      
    my_signal.connect(create_stream_item, sender=modelname)

Then i have created views for getting the feed which are working just fine if I create the StreamItem object from the admin site. But, the signals part isn't just working. I am just learning about it, so, I don't understand where I am wrong. Please help.

解决方案

Use post_save signal:

from django.db.models.signals import post_save

for model in [Fest, College, Event]:
    post_save.connect(create_stream_item, sender=model)

这篇关于使用Django中的信号创建Feed的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆