Return Celery 任务中的 QuerySet 对象 (mongo)
Return QuerySet object (mongo) in Celery task
我有一个应用程序,我在其中使用 Celery 作为任务队列、MongoDB 数据库和 mongoengine 作为 ORM。如果我尝试使用任务从我的数据库中获取一个对象并将其转换为 JSON,它工作正常。但是,如果我尝试 return 一个 QuerySet 对象,它会引发错误。我 需要 来获取 QuerySet 对象,因为我在另一个模型中将其用作 LazyReferenceField。
有没有办法做到这一点或从我的任务中获取 QuerySet 对象?
我见过类似问题的解决方案建议 Pickle,但也不鼓励这样做。
我认为尝试序列化 QuerySet 对象是个糟糕的主意,但请注意,可以使用 ID 设置 (Lazy)ReferenceField,因此也许您可以 return 简单地使用 ID。如果这不起作用,您最好的选择是 return ID,然后在另一侧加载对象(消耗 celery 输出的对象)
class Parent(Document):
name = StringField()
class House(Document):
owner = ReferenceField(Parent)
p = Parent(name='Bob').save()
House(owner=p.id).save()
h = House.objects.first()
assert h.owner.name == 'Bob'
我有一个应用程序,我在其中使用 Celery 作为任务队列、MongoDB 数据库和 mongoengine 作为 ORM。如果我尝试使用任务从我的数据库中获取一个对象并将其转换为 JSON,它工作正常。但是,如果我尝试 return 一个 QuerySet 对象,它会引发错误。我 需要 来获取 QuerySet 对象,因为我在另一个模型中将其用作 LazyReferenceField。
有没有办法做到这一点或从我的任务中获取 QuerySet 对象?
我见过类似问题的解决方案建议 Pickle,但也不鼓励这样做。
我认为尝试序列化 QuerySet 对象是个糟糕的主意,但请注意,可以使用 ID 设置 (Lazy)ReferenceField,因此也许您可以 return 简单地使用 ID。如果这不起作用,您最好的选择是 return ID,然后在另一侧加载对象(消耗 celery 输出的对象)
class Parent(Document):
name = StringField()
class House(Document):
owner = ReferenceField(Parent)
p = Parent(name='Bob').save()
House(owner=p.id).save()
h = House.objects.first()
assert h.owner.name == 'Bob'