Celery不会遍历Django的外键关系

时间:2015-12-09 23:12:01

标签: django celery django-queryset django-celery

我在Heroku上运行了两个实例:
  1. Gunicorn
  2.芹菜

在我的电子邮件模板中,我有一些效果:

    app.projectCollection = Backbone.Collection.extend({

        model: app.projectDetails,

        url: '/profile.json',

        parse: function(attrs){
            return attrs.projects;
        }
    });

    var projects = new app.projectCollection();
    projects.fetch();


// View
app.portfolioView = Backbone.View.extend({
    el: '.portfolio-body',

    projectTemplate: template('portfolio-template'),

    initialize: function(options){

        this.listenTo(this.collection, 'add', this.render);

    },

    events: {
        'click .portfolio-item': 'showModal' // listen for click to show modal
    },

    showModal: function(e){
        e.preventDefault();
        modalView.render(); // render the modal
        // console.log("clicked" + e.currentTarget.attr('caption'));

    },

    render: function(){ // projects render just fine
        this.$el.html(this.projectTemplate({collection: this.collection.toJSON()})); // pass in collection data for template to iterate though projects 

        return this;
    }
});

var portfolioView = new app.portfolioView({collection: projects}); // pass in JSON

// Modal View
app.modalView = Backbone.View.extend({ 
    className: 'modal fade',

    modalTemplate: template('modal-template'),

    attributes: {
        tabindex: '-1',
        role: 'dialog'
    },

    render: function(){
        this.$el.html(this.modalTemplate()).modal();

        return this;
    }
});

var modalView = new app.modalView();

当我通过网络实例呈现这些电子邮件时(即没有Celery),我得到一个订单商品列表(如预期的那样)。

但是,当我使用Celery渲染这些模板时,列表为空。

为什么Celery不会遍历模板中的外键关系,我怎么知道范围内外的内容?

1 个答案:

答案 0 :(得分:2)

最有可能的问题是,在执行芹菜任务时,django数据库对象是陈旧的。

Deni Bertovic在https://denibertovic.com/posts/celery-best-practices/

中注意到了这个问题
  

您不应将Database对象(例如您的用户模型)传递给后台任务,因为序列化对象可能包含陈旧数据。您要做的是为任务提供用户ID,并让任务向数据库询问新的用户对象。