我在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不会遍历模板中的外键关系,我怎么知道范围内外的内容?
答案 0 :(得分:2)
最有可能的问题是,在执行芹菜任务时,django数据库对象是陈旧的。
Deni Bertovic在https://denibertovic.com/posts/celery-best-practices/
中注意到了这个问题您不应将Database对象(例如您的用户模型)传递给后台任务,因为序列化对象可能包含陈旧数据。您要做的是为任务提供用户ID,并让任务向数据库询问新的用户对象。