python - 预期的 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)
推荐阅读
- javascript - 抓取脚本标签中的数据
- python - Kivy 中 blit 后快速重绘纹理
- android - react native ':app:packageRelease' 总是失败,因为它找到了我删除的旧密钥库
- xamarin.forms - Youtube 视频未以 Xamarin 形式播放 webview
- sql - 包含从 AA 到 ZZ 的所有可能组合的表格
- ios - Observable 是 Observing BehaviorRelay 只调用一次。RxSwift
- msbuild - Visual Studio 2019 v16.3 及更高版本无法使用 netcoreapp3.0 MSBuild 任务构建 netcoreapp3.0 项目的解决方法
- c++ - 如何使用此代码将 cin 转换为小写?
- java - 如何在java中修改多态程序
- c - 我可以用 C 编写的程序编辑 gpedit.msc 吗?