拼命地需要帮助完成此任务;现在已经侵入了它一天。其功能是将管理员通过管理界面编写的文本转换为用户可以通过Web应用程序查看的PDF。Django管理员“预览PDF”按钮
除了我希望能够看到在实际发布之前生成的PDF之外,该功能已经实现。所以在管理界面中,我正在创建一个“预览PDF”按钮。从本质上讲,它将保存当前表单(有新的更改)生成PDF,以便可以看到更改,并回滚到原始状态,以便外部世界不会看到变化。
我正在通过覆盖模型中的保存功能来解决问题。
@transaction.commit_manually
def save(self, force_insert=False, force_update=False, using=None):
super(Doc, self).save(force_insert=force_insert, force_update=force_update, using=using)
if self.preview:
from lava_server.settings import common
# make a copy
doc_copy = self
doc_copy.id = None
# Prevent loopback
doc_copy.preview = False
transaction.rollback()
doc_copy.save()
common.TEMP_PDF_ID = doc_copy.id
else:
transaction.savepoint_commit(sid)
我也重写了response_change和response_add以重定向到呈现PDF的视图。该视图在渲染后删除doc_copy。
说实话,这是工作,我认为,但现在它给我一个
TransactionManagementError: Transaction managed block ended with pending COMMIT/ROLLBACK
这是因为我在保存方法嵌套事务的可能?但我觉得我应该寻求更高的帮助,以防万一我错过了一些基本的东西,或者只有一个简单的高级方法。
任何帮助非常感谢,谢谢!
第一个解决方案的问题是我需要提供预览PDF中的最新更改,所以我需要在保存PDF文件之前将其保存,然后再回滚。然而,我确实实施了第二个建议。每个实例都有一个状态字段,视图表只呈现“已发布”的PDF。谢谢! – Rawkcy
如果不起作用,请尝试:'content_type ='application/pdf'' – swietyy