[Django] #30811: Django throws 'UnicodeEncodeError' when using Cyrillic symbols to override field upload_to.

4 views
Skip to first unread message

Django

unread,
Sep 26, 2019, 4:44:26 PM9/26/19
to django-...@googlegroups.com
#30811: Django throws 'UnicodeEncodeError' when using Cyrillic symbols to override
field upload_to.
-------------------------------------+-------------------------------------
Reporter: persik- | Owner: persik-dev
dev |
Type: | Status: assigned
Uncategorized |
Component: Database | Version: 2.2
layer (models, ORM) | Keywords: UnicodeEncodeError,
Severity: Normal | Cyrillic, upload_to, File,
Triage Stage: | FileField
Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
So, I have a ''Book'' model, that contains some fields. But most important
are:
**'title' as 'CharField'**
**'pdf', 'epub', 'fb2' as 'FileField'**
**'image' as 'ImageField'**
we will return to they in just a second...
My ''Book'' model also has overrided ''clean'' method. In that method I
assign my ''title'' field value as ''upload_to'' value.

{{{
uploading_files = [
self.image,
self.pdf,
self.fb2,
self.epub
]
for file_ in uploading_files:
file_.field.upload_to = self.title
}}}
Here is where bug hided. If I set ''title'' value to "Колобок", for
example, it throws me an ''UnicodeEncodeError''. This thing happends only
when i first create model.
If I firstly will set ''title'' value as "Kolobok", and later rename it to
"Колобок", I have no error.

----

I already some kind of "fixed" this.
Endpoint of thrown exception was **...\django\db\models\fields\files.py**.
After fork from your Github, I followed this path, and find function that
throws that error, that function was ''generate_filename'' in
''FileField'' class, line 305. After I added small correct...

{{{
try:
dirname = datetime.datetime.now().strftime(self.upload_to)
except UnicodeEncodeError:
dirname = self.upload_to
}}}

... all works fine now, and I can use Cyrillic symbols as my ''title'' and
folder name in ''upload_to'' attribute.

--
Ticket URL: <https://code.djangoproject.com/ticket/30811>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
Sep 26, 2019, 4:44:42 PM9/26/19
to django-...@googlegroups.com
#30811: Django throws 'UnicodeEncodeError' when using Cyrillic symbols to override
field upload_to.
-------------------------------------+-------------------------------------
Reporter: persik-dev | Owner: persik-
| dev
Type: Bug | Status: assigned
Component: Database layer | Version: 2.2
(models, ORM) |
Severity: Normal | Resolution:
Keywords: UnicodeEncodeError, | Triage Stage:
Cyrillic, upload_to, File, | Unreviewed
FileField |

Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by persik-dev):

* type: Uncategorized => Bug


--
Ticket URL: <https://code.djangoproject.com/ticket/30811#comment:1>

Django

unread,
Sep 26, 2019, 4:47:19 PM9/26/19
to django-...@googlegroups.com
#30811: Django throws 'UnicodeEncodeError' when using Cyrillic symbols to override
field upload_to.
-------------------------------------+-------------------------------------
Reporter: persik-dev | Owner: persik-
| dev
Type: Bug | Status: assigned
Component: Database layer | Version: 2.2
(models, ORM) |
Severity: Normal | Resolution:
Keywords: UnicodeEncodeError, | Triage Stage:
Cyrillic, upload_to, File, | Unreviewed
FileField |
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Description changed by persik-dev:

Old description:

New description:

----

----
For comfort, here is my [https://github.com/persik-dev/LibraLive Github]
with all ''my'' Django code in it.

--

--
Ticket URL: <https://code.djangoproject.com/ticket/30811#comment:2>

Django

unread,
Sep 27, 2019, 6:59:03 AM9/27/19
to django-...@googlegroups.com
#30811: Django throws 'UnicodeEncodeError' when using Cyrillic symbols to override
field upload_to.
-------------------------------------+-------------------------------------
Reporter: Kirill | Owner: Kirill
Type: Bug | Status: closed
Component: Database layer | Version: master
(models, ORM) |
Severity: Normal | Resolution: invalid

Keywords: UnicodeEncodeError, | Triage Stage:
Cyrillic, upload_to, File, | Unreviewed
FileField |
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by felixxm):

* status: assigned => closed
* version: 2.2 => master
* resolution: => invalid


Comment:

Thanks for this report, however I don't think that it is an issue in
Django, but rather in your implementation if you want to set `upload_to`
dynamically you should set it to a callable, e.g.
{{{

def callable_upload_to(instance, filename):
return posixpath.join(instance.title, filename)

class Book(models.Model):
pdf = FileField(..., upload_to=callable_upload_to)
...
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/30811#comment:3>

Reply all
Reply to author
Forward
0 new messages