Python Django:如何将pdf文件附加到模型实例?

Python Django:如何将pdf文件附加到模型实例?,python,django,django-models,Python,Django,Django Models,更新:下面是很好的代码,但我在测试时碰巧遇到了一个用户错误。所以我问了一个不理解的问题,我有一个准确的答案@尤里的评论很有帮助。我在任何地方都找不到像下面列出的食谱那样简单的指南,而是浏览了4个不同的django文档页面。我希望其他人会发现下面的代码很有帮助 我希望能够将文件附加到django shell中的模型对象。到目前为止,我认为我已经设置了必要的部分。在我的设置文件中: from unipath import Path FILE_UPLOAD_HANDLERS = ( "dja

更新:下面是很好的代码,但我在测试时碰巧遇到了一个用户错误。所以我问了一个不理解的问题,我有一个准确的答案@尤里的评论很有帮助。我在任何地方都找不到像下面列出的食谱那样简单的指南,而是浏览了4个不同的django文档页面。我希望其他人会发现下面的代码很有帮助


我希望能够将文件附加到django shell中的模型对象。到目前为止,我认为我已经设置了必要的部分。在我的设置文件中:

from unipath import Path
FILE_UPLOAD_HANDLERS = (
    "django.core.files.uploadhandler.MemoryFileUploadHandler",
    "django.core.files.uploadhandler.TemporaryFileUploadHandler",
)
PROJECT_DIR = Path(__file__).ancestor(3)  # settings.py in settings dir
MEDIA_DIR = (PROJECT_DIR.child("media"))
MEDIA_URL = '/media/'
我的模型:

from django.core.files.storage import FileSystemStorage
press_release_storage = FileSystemStorage()

class Peer(models.Model):
    peer_quarter_code = models.CharField(max_length=20, unique=True)
    press_release = models.FileField(
        upload_to='press_releases',
        storage=press_release_storage,
        blank=True, null=True
    )
然后在
python manage.py shell中

>>> from peer.models import Peer
>>> from django.core.files import File
>>>
>>> peer = Peer.objects.create(peer_quarter_code='20133ABC')
>>> content = File(open('20133ABC_pr.pdf'))  # conveniently placed
>>> peer.press_release = content
>>> peer.save()
>>> type(peer.press_release)
<class 'django.db.models.fields.files.FieldFile'>
>>>
>>> peer.press_release.save('20133ABC_pr.pdf', content, save=True)
AttributeError: 'file' object has no attribute 'size'
>>来自peer.models导入peer
>>>从django.core.files导入文件
>>>
>>>peer=peer.objects.create(peer\u quarter\u code='20133ABC')
>>>内容=文件(打开('20133ABC_pr.pdf'))#方便放置
>>>peer.press_release=内容
>>>peer.save()
>>>类型(对等新闻稿)
>>>
>>>peer.press\u release.save('20133ABC\u pr.pdf',content,save=True)
AttributeError:“文件”对象没有属性“大小”
虽然我有使用Django的经验,但这段代码反映了我第一次使用
文件
文件系统存储
文件上传处理程序
,等等。无论我得到什么样的指导,对这些步骤的清晰解释都是非常有价值的


更新:我只是重新运行了控制台上使用的代码,没有得到
AttributeError
。我想是佩巴克。但是,该文件尚未保存到
媒体
目录中,这正是我所期望的。有什么想法吗?

为什么您决定使用django
文件
对象而不是普通对象?(一个普通的python文件对象有一个名为size的属性。根据错误,这个属性丢失了)@yuri我以为我在遵循django的指示。@yuri我试过了,但当我尝试
peer.press\u release.save('20133ABC\u pr.pdf
,open('20133ABC\u pr.pdf
),save=True)
我得到“属性错误:'file'对象没有属性“save”。所以我还不知道我在这里做的是正确的还是错误的。实际上我刚刚测试了你的代码,没有任何问题。您确定文件名正确吗?(或许可以尝试使用绝对路径?)谢谢@yuri。我在我的
媒体
目录中查找文件,但它们却在一个独立的
新闻稿
目录中。一旦我看到了这一点,我就得出了同样的结论,那就是我的代码起作用了。谢谢你回头看我。这对我来说是Django的全新用法。