Ожидается str, bytes или объект os.PathLike, а не QuerySet

Я хочу извлечь поле файла из моей модели, и открыть файл (файл в формате .pdf). но я получил эту ошибку :

ожидается str, bytes или объект os.PathLike, а не QuerySet

мой models.py имеет вид :

class FileUpload(models.Model):

    author = models.ForeignKey(User, on_delete=models.CASCADE, blank=True , null=True)
    file = models.FileField(upload_to='files')




    def get_absolute_url(self):
        return reverse('home')

мой views.py имеет вид :

class PostDetailView(DetailView):
    context_object_name = "object_list"
    template_name = "post_detail.html"

   

    def get_object(self, *args,**kwargs):
        request = self.request
        pk = self.kwargs.get('pk')
        instance = FileUpload.objects.filter(id = pk)

        if instance is None:
            raise Http404("File Does not EXIST")
        else:
            pdfFileObj = open(instance, 'rb')
            pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
            print(pdfReader.numPages)
            pageObj = pdfReader.getPage(0)
            print(pageObj.extractText())
            pdfFileObj.close()
        return instance

Сейчас я не использую никаких шаблонов. Просто хочу вывести данные файла в терминале. Когда я обновляю страницу, я получаю эту ошибку .

Вы работаете с набором запросов, а не с экземпляром вашей модели.

instance = FileUpload.objects.filter(id=pk)

.filter(..) возвращает кверисет. Здесь вы хотите .get(id=pk) получить единственный экземпляр вашей модели.

instance = FileUpload.objects.get(id=pk)

Но у вас все еще есть другая проблема, которая заключается в обращении с экземпляром модели как с файлом. Вам нужно получить доступ к полю экземпляра:

pdfReader = PyPDF2.PdfFileReader(instance.file)
Вернуться на верх