Автоматически загружаемый счет-фактура pdf
Я хочу создать опцию для загрузки pdf файла со счетом со следующими свойствами в админке базы данных django:
models.py:
from django.db import models
from appsystem.models import Outlet
from core.models import Item, Supplier
from location.models import Warehouse, Zone, Section, Level
class MainPurchases(models.Model):
METHOD_A = 'CASH'
METHOD_B = 'CREDIT'
PAYMENT_METHODS = [
(METHOD_A, 'CASH'),
(METHOD_B, 'CREDIT'),
]
product = models.ForeignKey(Item, on_delete=models.CASCADE)
quantity = models.PositiveSmallIntegerField()
purchase_price = models.DecimalField(max_digits=6, decimal_places=2)
paid_amount = models.DecimalField(max_digits=6, decimal_places=2)
date_created = models.DateTimeField(auto_now_add=True)
supplier = models.ForeignKey(Supplier, on_delete=models.CASCADE)
Мне нужно, чтобы это был печатный бланк счета-фактуры с указанными значениями, но я просто не могу ничего добиться.
На самом деле это два вопроса. Как сгенерировать pdf из данных в БД, и как доставить его веб-клиенту (браузеру).
Отвечая на второй, вот мнение, которое я написал ранее
from io import BytesIO
def pdfview( request, pk):
quote = get_object_or_404( Quote, pk=pk) # object to build pdf from
pdf = build_pdf( quote)
iobuf = BytesIO( bytearray(pdf.output( dest='S' ), encoding='latin-1'))
response = HttpResponse( iobuf, content_type='application/pdf')
response['Content-Disposition'
] = 'inline; filename={}.pdf'.format(quote.quotenumber)
# inline; will ask for an immediate display of the content
# attachment; will offer options to the user, including save without display
# exact details are browser-specific.
return response
Что касается build_pdf, я использовал fpdf
from fpdf import FPDF
def build_pdf( quote):
pdf = FPDF()
# pdf.this( ...)
# pdf.that( ...)
# much later, when done
return pdf