如何在报表实验室中引用模型



我的目标是使用ReportLab创建一个pdf报告,其中某些文本是基于主键的动态的。

我有一个下拉列表,列出了当前在程序中创建的每个主键(目前为 #1 - 5),随着更多"发货"的创建,主键被添加到下拉列表中。

当我选择主键,然后单击"提交"按钮时,我希望我的pdf生成动态文本与该pk特别相关的位置。

下面是我目前拥有的静态文本(从reportlab上的源中提取)的PDF视图,我希望根据所选的pk动态替换"JOHN DOE"和"名称转到此处"等值。

views.py

def write_pdf_view(request):
response = HttpResponse(content_type='application/pdf')
response['Content-Disposition'] = 'inline; filename="mypdf.pdf"'

buffer = BytesIO()
p = canvas.Canvas(buffer)
# Start writing the PDF here
p.setLineWidth(.3)
p.setFont('Helvetica', 12)

p.drawString(30,750,'Name goes here') 
p.drawString(30,735,'OF ACME INDUSTRIES')
p.drawString(500,750,"12/12/2010")
p.line(480,747,580,747)
p.drawString(275,725,'AMOUNT OWED:')
p.drawString(500,725,"$1,000.00")
p.line(378,723,580,723)
p.drawString(30,703,'RECEIVED BY:')
p.line(120,700,580,700)
p.drawString(120,703,"JOHN DOE")
# End writing
p.showPage()
p.save()
pdf = buffer.getvalue()
buffer.close()
response.write(pdf)
return response

这是正在创建的下拉列表

ViEWS.py

def reference_view(request):
query_results = Orders.objects.all()
reference_list = DropDownMenuReferences()
context = {
'query_results': query_results,
'reference_list': reference_list
}
return render(request, 'proforma_select.html', context)

Forms.py

class DropDownMenuReferences(forms.Form):
Reference_IDs = forms.ModelChoiceField(queryset=Orders.objects.values_list('reference', flat=True).distinct(),
empty_label=None)

模板

{% extends 'base.html' %}
{% block body %}
<div class="container">
<br>
<form method=POST action="">
{{ reference_list }}
<button type="submit" class="btn btn-primary" name="button">Add Order</button>
</form>
</div>
{% endblock %}

我目前完全不确定如何处理这个问题。 我有下拉菜单,我了解如何创建pdf,我只是不知道将它们绑在一起。

您可以在程序的表单区域中包含所需人员的相关主键。当用户单击"提交"按钮时,该主键将包含在request对象中。

然后在您的write_pdf_view函数中,您可以通过以下方式从数据库中提取相关人员:

def write_pdf_view(request):
if request.method == 'POST':
primary_key = request.POST.get('primary_key')
person = models.Person.objects.get(pk=primary_key)
...
p.drawString(120, 703, person.full_name)
...
return response

最新更新