Чтение и запись в PDF-файлы, хранящиеся в Django Models.py - PullRequest
0 голосов
/ 13 апреля 2020

Могу ли я хранить PDF-файлы в Django Models.py под ImageField? Документация , похоже, не особо упоминает PDF-файлы. Я думаю попробовать что-то вроде:

from django.db import models

class Model(models.Model):
    text = models.CharField(max_length=30, unique=False)
    pdf = models.ImageField(upload_to='media/pdfs')

со структурой form.py следующим образом:

from django import forms
from model.models import Model

class textForm(forms.ModelForm):
    class Meta:
        model = Model
        fields = ('text',)

Со структурой Views.py следующим образом:

def user_view(request):
    text = form.cleaned_data.get('text')
    can.drawString(10, 100, Model.text)

    existing_pdf = PdfFileReader(open("media/01.pdf", "rb"))
    page = existing_pdf.getPage(0)
    page.mergePage(new_pdf.getPage(0))
    PdfFileWriter().addPage(page)

    return render(request, "app/fill_form.html", context)

1 Ответ

2 голосов
/ 13 апреля 2020

Попробуйте модели. FileField https://docs.djangoproject.com/en/3.0/topics/http/file-uploads/

Вот фрагмент из документов

from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import ModelFormWithFileField

def upload_file(request):
    if request.method == 'POST':
        form = ModelFormWithFileField(request.POST, request.FILES)
        if form.is_valid():
            # file is saved
            form.save()
            return HttpResponseRedirect('/success/url/')
    else:
        form = ModelFormWithFileField()
    return render(request, 'upload.html', {'form': form})

Если вам нужен доступ к загруженным файлам из представления, они будут в

requests.FILES 

Чтобы вернуть PDF в качестве представления, вы можете следить за этим сообщением Как показать файл PDF в представлении Django?

def pdf_view(request):
    with open('/path/to/my/file.pdf', 'r') as pdf:
        response = HttpResponse(pdf.read(), mimetype='application/pdf')
        response['Content-Disposition'] = 'inline;filename=some_file.pdf'
        return response
    pdf.closed

Если у вас есть pdf в ваших моделях, вы можете просто добавить функцию editPDF в вашу модель, которая может добавить выделенный текст так, как вы делаете (при условии, что это работает) и сохранить PDF.

...