#29632: After migrating a Django project from Python 2 to 3, db migration of
django.contrib.sites fails with "TypeError: attribute name must be string,
not 'bytes'"
-------------------------------------+-------------------------------------
Reporter: Florian Mayer | Owner: nobody
Type: Bug | Status: closed
Component: Migrations | Version: master
Severity: Normal | Resolution: needsinfo
Keywords: migration, unicode, | Triage Stage:
bytestring, TypeError | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Carlton Gibson):
* status: new => closed
* resolution: => needsinfo
Comment:
Hi Florian.
This doesn't make sense quite as it is.
On Python 3 unprefixed string literals are just are ''unicode literals'',
i.e. the `from __future__ import unicode_literals` doesn't do anything.
> Under Python 3, e.g. its ​model manager name 'objects' will be
interpreted as bytestring b'objects'.
This is incorrect.
{{{
>>> 'objects'
'objects'
>>> 'objects'.encode('utf8')
b'objects'
>>>
}}}
On Python 3, it's only when you encode the string that you get bytes.
So the question is How is this happening?
> Can reproduce on Ubuntu 16.04 (Python 3.6.x Anaconda) and 14.04 (Python
3.4.3).
OK, so can you put this in a minimal project that reproduces the error?
Then we've got something to look at.
(In general, the `sites` app is part of Django's own test suite, so those
migrations are run extensively without problem, on Python 3.)
You said you're updating BOTH Django (from 1.11) and Python (from 2.7).
One thought is to make sure you do the Python upgrade first. Rollback to
1.11, upgrade to Python 3, run all migrations, and make sure everything is
working. Then upgrade to Django 2.x. (This is just a sanity check. It
doesn't explain the error you're seeing.)
--
Ticket URL: <https://code.djangoproject.com/ticket/29632#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/066.4089d894f07064ec0feab2cd3aff8966%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.