These are the codes from django.db.models.fields
__all__ = [str(x) for x in (
'AutoField', 'BLANK_CHOICE_DASH', 'BigAutoField', 'BigIntegerField',
'BinaryField', 'BooleanField', 'CharField', 'CommaSeparatedIntegerField',
'DateField', 'DateTimeField', 'DecimalField', 'DurationField',
'EmailField', 'Empty', 'Field', 'FieldDoesNotExist', 'FilePathField',
'FloatField', 'GenericIPAddressField', 'IPAddressField', 'IntegerField',
'NOT_PROVIDED', 'NullBooleanField', 'PositiveIntegerField',
'PositiveSmallIntegerField', 'SlugField', 'SmallIntegerField', 'TextField',
'TimeField', 'URLField', 'UUIDField',
)]
I think str(x) for x in (...)
and x for x in (...)
are the same in this situation. Why is the str() used?
Note the from __future__ import unicode_literals
at the top of the code.
Every string literal will be a unicode string by default now (like it is already in Python 3).
>>> from __future__ import unicode_literals
>>> s = 'test'
>>> type(s)
<type 'unicode'>
In order to avoid the TypeError
mentioned in the comment
# Avoid "TypeError: Item in ``from list'' not a string" -- unicode_literals
# makes these strings unicode
all the unicode literals in the tuple ('AutoField', 'BLANK_CHOICE_DASH', ...)
are converted to Python 2 bytestrings.
You are right that the list comprehension would be completely pointless (in both versions of Python) if the import
statement at the top was not there.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With