Как ссылаться на модель в Reportlab - PullRequest
0 голосов
/ 29 мая 2019

Моя цель - создать отчет в формате PDF с использованием ReportLab, где часть текста является динамической на основе первичного ключа.

У меня есть раскрывающийся список с каждым первичным ключом, созданным в настоящее время в программе (# 1 - 5в настоящее время) и по мере создания дополнительных "отправлений" в раскрывающийся список добавляется первичный ключ.

Когда я выбираю первичный ключ и затем нажимаю кнопку "отправить", я хотел бы, чтобы мой файл PDF создавал гдединамический текст связан именно с этим pk.

Ниже приведен вид PDF-файла, который у меня есть на данный момент, со статическим текстом (взятым из источника на reportlab), где мне нужны такие значения, как «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, я просто не знаю, где их связать.

1 Ответ

0 голосов
/ 29 мая 2019

Вы можете включить соответствующий первичный ключ нужного человека в форму области вашей программы. Когда пользователь нажимает кнопку «Отправить», этот первичный ключ включается в ваш объект 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

...