将Django-haystack查询集序列化

8
我想导出从Haystack搜索视图获取的Queryset结果。为了做到这一点,我发现最好的方法是异步处理,所以我使用Celery和Rabbitmq来管理任务,在那里创建文件并迭代所有结果,然后通过电子邮件通知用户文件已准备好供他们下载。 但是,为了将QuerySet传递给Celery,我需要对其进行序列化。
有没有快速的方法可以做到这一点?还是我应该复制请求参数并重新执行搜索?

1
将模型对象或查询集传递给任务不是最佳实践(请参见http://ask.github.com/celery/userguide/tasks.html#state)。 但只要您在任务之后不更改任何数据库状态,似乎您可以清除此处的内容。至于如何序列化它,通常情况下,只要使用Task.serializer="pickle"(默认值),就应该可以正常工作,可能会有一些在评估的查询集中无法进行pickle的对象。也许您可以包含pickle给出的traceback? - asksol
1个回答

5
您可以将Haystack QuerySet序列化为JSON,如下所示:
from django.core import serializers
serializers.serialize("json", [q.object for q in queryset])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接