信号仅在shell中工作,不在admin和前端工作

时间:2016-08-23 14:12:44

标签: django shell django-models django-admin django-signals

我试图在保存后保存模型字段中的某些值。模型是

class Authority(models.Model):
    no_of_feeds=models.PositiveIntegerField()
    no_of_rf=models.PositiveIntegerField()
    no_of_urf=models.PositiveIntegerField()


class Feed(models.Model):
        auth=models.ForeignKey(Authority,blank=False)

    @receiver(post_save, sender = Feed)
    def update_model_feed(sender, **kwargs):
        if kwargs['created']: #only fire when creating new objects
            kwargs['instance'].auth.no_of_feeds=kwargs['instance'].auth.feed_set.all().count()
            kwargs['instance'].auth.no_of_rf=kwargs['instance'].auth.feed_set.filter(resolved=True).count()
            kwargs['instance'].auth.no_of_urf=kwargs['instance'].auth.feed_set.filter(resolved=False).count()
            print '******************************'
        elif not kwargs['created']:
            kwargs['instance'].auth.no_of_feeds=kwargs['instance'].auth.feed_set.all().count()
            kwargs['instance'].auth.no_of_rf=kwargs['instance'].auth.feed_set.filter(resolved=True).count()
            print '-------------------------------'
            kwargs['instance'].auth.no_of_urf=kwargs['instance'].auth.feed_set.filter(resolved=False).count()

正如您所看到的,信号用于在保存Authority模型后将值分配给Feed字段。这在shell中有效,因为字段会自动更新,但它不能用于创建或编辑管理员或前端网站中的Feed实例。尽管打印出了“-------'和' ****'在控制台中执行。请帮助

1 个答案:

答案 0 :(得分:0)

需要执行kwargs['instance'].auth.save()才能将相关Authority的更改写入数据库。如果我不得不猜测,它看起来像是在shell中工作,因为你正在查看内存中未保存的对象,而在你的工作站点上,你正在查看从数据库返回的值