首页 > 解决方案 > 将 ReportLab Pdf 附加到模型

问题描述

登录后,我的用户填写了四个表单,并生成了一个包含表单数据的 pdf。我可以成功地做到这一点并保存 pdf,但不知道如何将生成的 pdf 附加给用户。我通常将表单数据保存if request.method == 'POST':在 view.py 文件中的语句中,但 pdf 不是通过 POST 发送的,而是生成并保存在一个名为 after 的函数中,if request.method == 'POST':所以我想我需要一种方法将其附加到用户 pdf 模型在那个函数中?

另外,问卷很大,所以我把它分成四个单独的表格和四个单独的模型,每个模型都与用户一对一的关系。这是一种好的做法,还是我应该创建一个大型模型并使用四个单独的表格将其分解?

实用程序.py

def generate_questionnaire_pdf(request):
    # get user
    user = request.user

    # create pdf
    pdf = SimpleDocTemplate(settings.MEDIA_ROOT+'\pdfs\\questionnaire_pdfs\\user_%s.pdf' %user.id)

[..cont..]

pdf.build(elems, onFirstPage=partial(pageSetup, title=title, user=user), onLaterPages=pageSetup)

表格.py

class QuestionnairePdfForm(forms.ModelForm):

    class Meta:
        model = QuestionnairePdf
        fields = ['questionnaire_pdf']

模型.py

class QuestionnairePdf(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    questionnaire_pdf = models.FileField(upload_to='pdfs\\questionnaire_pdfs')

视图.py

def final_question(request):
    if request.method == 'POST':
        form = FinalQuestionForm(request.POST, request.FILES, instance=request.user.finalquestion)

        if form.is_valid():
            form.save()

            # generate pdf containing all answers to questionnaire
            utils.generate_questionnaire_pdf(request)

谢谢你。

标签: pythondjangodjango-modelsdjango-formsreportlab

解决方案


推荐阅读