迫切需要这项任务的帮助;现在已经破解了一天。该功能是将管理员通过管理界面编写的文本翻译成用户可以通过 Web 应用程序查看的 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
可能是因为我在保存方法中的嵌套事务?但我觉得我应该在这方面寻求更高的帮助,以防我遗漏了一些基本的东西,或者只是有一种简单的优越方法。
非常感谢任何帮助,谢谢!