删除了非ASCII字符的Django文件上传

时间:2017-05-22 20:46:05

标签: python django unicode

我正在使用文件名中的unicode字符将文件上传到我的Django模型,但是当显示名称时,它们会被删除或更改为最接近的ascii字符。我检查了上传路径功能,此时它仍然正确编码。

-> return u'proposal_documents/{0}/{1}'.format(instance.proposal.pk, filename)
(Pdb) x = u'proposal_documents/{0}/{1}'.format(instance.proposal.pk, filename)
(Pdb) x
u'proposal_documents/22872/\xa9\u02da\u2206\u222b\u02dau\u0308\u2122\xa2.png' 

我还检查了文件的已清理数据,并且文件也在那里正确显示。

-> for file_ in pdform.cleaned_data['files']:
(Pdb) pdform.cleaned_data['files']
[<InMemoryUploadedFile: ©˚∆∫˚ü™¢.png (image/png)>]

但是,检查模型时,非ascii字符已更改。

(Pdb) models.ProposalDocument.objects.order_by('-created_at')
<QuerySet [<ProposalDocument: u.png>, ...

在模型实例的文件路径中重申了这一点

(Pdb) models.ProposalDocument.objects.order_by('-created_at').first().file.name
u'proposal_documents/22872/u.png'

以下是模型(删除了import pdb; pdb.set_trace()

def proposal_doc_upload_path(instance, filename):
    return u'proposal_documents/{0}/{1}'.format(instance.proposal.pk, filename)


class ProposalDocument(models.Model):
    proposal = models.ForeignKey(Proposal, on_delete=models.CASCADE, related_name='documents')
    file = models.FileField(upload_to=proposal_doc_upload_path, max_length=500, blank=True)
    created_at = models.DateTimeField(auto_now=True)
    created_by = models.ForeignKey(Employee, on_delete=models.CASCADE)

    def __str__(self):
        return self.file.name.rsplit('/')[-1].encode('utf-8')

如何更改代码以使unicode字符保持不变? 我正在使用Django 1.10和Python 2.7

0 个答案:

没有答案