python2使用makemigrations报错:UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 0-

具体报错如下:

(venv) C:\Users\libol\PycharmProjects\day06>python manage.py makemigrations
Migrations for 'jobs':
  jobs\migrations\0001_initial.py
    - Create model Job
Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Users\libol\PycharmProjects\day06\venv\lib\site-packages\django\core\management\__init__.py", line 364, in execute_from_comm
and_line
    utility.execute()
  File "C:\Users\libol\PycharmProjects\day06\venv\lib\site-packages\django\core\management\__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Users\libol\PycharmProjects\day06\venv\lib\site-packages\django\core\management\base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Users\libol\PycharmProjects\day06\venv\lib\site-packages\django\core\management\base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "C:\Users\libol\PycharmProjects\day06\venv\lib\site-packages\django\core\management\commands\makemigrations.py", line 193, in ha
ndle
    self.write_migration_files(changes)
  File "C:\Users\libol\PycharmProjects\day06\venv\lib\site-packages\django\core\management\commands\makemigrations.py", line 231, in wr
ite_migration_files
    migration_string = writer.as_string()
  File "C:\Users\libol\PycharmProjects\day06\venv\lib\site-packages\django\db\migrations\writer.py", line 163, in as_string
    operation_string, operation_imports = OperationWriter(operation).serialize()
  File "C:\Users\libol\PycharmProjects\day06\venv\lib\site-packages\django\db\migrations\writer.py", line 120, in serialize
    _write(arg_name, arg_value)
  File "C:\Users\libol\PycharmProjects\day06\venv\lib\site-packages\django\db\migrations\writer.py", line 72, in _write
    arg_string, arg_imports = MigrationWriter.serialize(item)
  File "C:\Users\libol\PycharmProjects\day06\venv\lib\site-packages\django\db\migrations\writer.py", line 293, in serialize
    return serializer_factory(value).serialize()
  File "C:\Users\libol\PycharmProjects\day06\venv\lib\site-packages\django\db\migrations\serializer.py", line 44, in serialize
    item_string, item_imports = serializer_factory(item).serialize()
  File "C:\Users\libol\PycharmProjects\day06\venv\lib\site-packages\django\db\migrations\serializer.py", line 229, in serialize
    return self.serialize_deconstructed(path, args, kwargs)
  File "C:\Users\libol\PycharmProjects\day06\venv\lib\site-packages\django\db\migrations\serializer.py", line 101, in serialize_deconst
ructed
    arg_string, arg_imports = serializer_factory(arg).serialize()
  File "C:\Users\libol\PycharmProjects\day06\venv\lib\site-packages\django\db\migrations\serializer.py", line 332, in serializer_factor
y
    value = force_text(value)
  File "C:\Users\libol\PycharmProjects\day06\venv\lib\site-packages\django\utils\encoding.py", line 80, in force_text
    s = six.text_type(bytes(s), encoding, errors)
  File "C:\Users\libol\PycharmProjects\day06\venv\lib\site-packages\django\utils\functional.py", line 122, in __bytes_cast
    return bytes(func(*self.__args, **self.__kw))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)

问题截图:

image-20210727000925974

models代码:

# -*- coding: utf-8 -*-

from __future__ import unicode_literals


# Create your models here.
import sys

from django.db import models
from django.contrib.auth.models import User

from django.utils.translation import gettext_lazy as _

JobTypes = [
    (0, "技术类"),
    (1, "产品类"),
    (2, "运营类"),
    (3, "设计类"),
    (4, "市场营销类")
]

Cities = [
    (0, "北京"),
    (1, "上海"),
    (2, "深圳"),
    (3, "杭州"),
    (4, "广州")
]


class Job(models.Model):
    # Translators: 职位实体的翻译
    job_type = models.SmallIntegerField(blank=False, choices=JobTypes, verbose_name=_("职位类别"))
    job_name = models.CharField(max_length=250, blank=False, verbose_name=_("职位名称"))
    job_city = models.SmallIntegerField(choices=Cities, blank=False, verbose_name=_("工作地点"))
    job_responsibility = models.TextField(max_length=1024, verbose_name=_("职位职责"))
    job_requirement = models.TextField(max_length=1024, blank=False, verbose_name=_("职位要求"))
    creator = models.ForeignKey(User, verbose_name=_("创建人"), null=True, on_delete=models.SET_NULL)
    created_date = models.DateTimeField(verbose_name=_("创建日期"), auto_now_add=True)
    modified_date = models.DateTimeField(verbose_name=_("修改日期"), auto_now=True)

解决办法:

在models中加:

reload(sys)
sys.setdefaultencoding("utf8")

models完整代码如下:

# -*- coding: utf-8 -*-

from __future__ import unicode_literals


# Create your models here.
import sys

from django.db import models
from django.contrib.auth.models import User

from django.utils.translation import gettext_lazy as _
reload(sys)
sys.setdefaultencoding("utf8")
JobTypes = [
    (0, "技术类"),
    (1, "产品类"),
    (2, "运营类"),
    (3, "设计类"),
    (4, "市场营销类")
]

Cities = [
    (0, "北京"),
    (1, "上海"),
    (2, "深圳"),
    (3, "杭州"),
    (4, "广州")
]


class Job(models.Model):
    # Translators: 职位实体的翻译
    job_type = models.SmallIntegerField(blank=False, choices=JobTypes, verbose_name=_("职位类别"))
    job_name = models.CharField(max_length=250, blank=False, verbose_name=_("职位名称"))
    job_city = models.SmallIntegerField(choices=Cities, blank=False, verbose_name=_("工作地点"))
    job_responsibility = models.TextField(max_length=1024, verbose_name=_("职位职责"))
    job_requirement = models.TextField(max_length=1024, blank=False, verbose_name=_("职位要求"))
    creator = models.ForeignKey(User, verbose_name=_("创建人"), null=True, on_delete=models.SET_NULL)
    created_date = models.DateTimeField(verbose_name=_("创建日期"), auto_now_add=True)
    modified_date = models.DateTimeField(verbose_name=_("修改日期"), auto_now=True)

问题解决:

执行成功!!!

image-20210727001107093

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值