Search code examples
pythondjangouploadfilefield

TypeError when open object of django filefield


I want to make a button named 'count' to count the number of page of the uploaded pdf file. However, there is TypeError invalid file:

How can I improve my code to tackle this error...?

PS. I'm newbie in coding using django 1.10, and just want to make some little tool to make my life easiler :)

Thanks in advance

My Models

from django.db import models
from PyPDF2 import PdfFileReader

class PdfFile(models.Model):
    file = models.FileField(upload_to='document/')
    num_of_pages = models.IntegerField(null=True)

    def page_count(self):
        pdf = PdfFileReader(open(self.file, 'rb'))
        self.num_of_pages = pdf.getNumPages()
        self.save()

My Views

def count(request, pk):
    pdf = get_object_or_404(PdfFile, pk=pk)
    pdf.page_count()
    return redirect('img_preview', pk=pk)

Solution

  • You can't pass a filefield value directly to open. However, as the documentation shows, that object itself has an open method:

    pdf = PdfFileReader(self.file.open())
    

    Because of the way that class also defines read and __iter__, you might actually be able to pass the field directly:

    pdf = PdfFileReader(self.file)