摘要:最近学习Django中,自己随便写写还是碰到了挺多问题,不过貌似都是比较常见,还能顺利解决。现在写下来,也许以后会忘记,也许能帮上碰到同样问题的

小编我前面已经写过一篇关于Django常见错误的文章了,该文比较适合新手阅读,防止学习Django过程中入坑。今天小编我要总结实际Django开发过程中和debug过程中经常碰到的错误信息以及如何解决它们。本文适合所有Python Web开发学习者和工作者,值得加入你的收藏。Django之所以优秀,就是因为它在开发环境下提供了丰富的debug报错信息,从而减少了在生产环境下产生bug。本文会尝试着为那些错误信息提供解决方案。

 

---------------------------------------------------------------

You are trying to add a non-nullable field 'mod_date' to book without a default; we can't do that (the database needs something to populate existing rows).

Please select a fix:

 1) Provide a one-off default now (will be set on all existing rows with a null value for this column)

 2) Quit, and let me add a default in models.py

-----------------------------------------------------------------------------

出现原因和解决方案

出现这个错误的原因是因为你修改了模型models.py,增加了一些字段,却没有提供默认值。对于新增的字段,你必需要设置其为null或者提供默认值。本例中,你可以将新增字段改为mod_date = models.DateField(null=True), 然后重新运行python manage.py makemigrationspython manage.py migrate

错误2

---------------------------------------------------------------------

ImportError: No module named 'MySQLdb'

---------------------------------------------------------------------------------

出现原因和解决方案

出现这个错误的原因是因为试图使用MySQL作为数据库,却没有安装相应模块。解决方案如下:

  • 通过pip安装pymysql模块

  • 在app的__init__.py文件中写入以下内容

        import pymysql  

        pymysql.install_as_MySQLdb()

 

错误3

---------------------------------------------------------------------

RuntimeWarning: DateTimeField received a naive datetime

---------------------------------------------------------------------------------

出现原因和解决方案

出现这个错误的原因在于你没有在settings.py里设置时区,Django不知道提供哪个时区的时间好。小编强烈建议你给所有的Django项目设置时区。如果你要使用中国时间,可以使用TIME_ZONE = 'Asia/Shanghai'请注意: 在Django的配置文件里有两个配置参数是跟时间与时区有关的,分别是TIME_ZONEUSE_TZ

  • 如果USE_TZ设置为True时,Django会使用系统默认设置的时区,即芝加哥时间America/Chicago,此时的TIME_ZONE不管有没有设置都不起作用。

  • 如果USE_TZ 设置为False,而TIME_ZONE设置为None,则Django还是会使用默认的America/Chicago时间。

  • TIME_ZONE设置为其它时区的话,则还要分情况。如果是Windows系统,则TIME_ZONE设置是没用的,Django会使用本机的时间。如果为其他系统,则使用该时区的时间,入设置USE_TZ = FalseTIME_ZONE = 'Asia/Shanghai', 则使用上海的UTC时间。

 

错误4

---------------------------------------------------------------------

UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list:

---------------------------------------------------------------------------------

出现原因和解决方案

出现这个错误的原因是obj.objects.all()的列表是无序的,使用Paginator类分页会出错,因为每次分页第一页都可能出现不同的结果。解决方案是在查询结果上加上order_by排序, 比如obj.objects.all().order_by("id")。

 

错误5

---------------------------------------------------------------------

NoReverseMatch error at /xxx/

---------------------------------------------------------------------------------

出现原因和解决方案

出现这个错误的原因是命名url反向解析还需要你提供参数,而且参数数量也要一致。比如你直接使用{% url "product_detail" %}肯定会出现这个错误,因为你忘了提供product.id啊。如果你不提供id,Django怎么知道这个url指向哪个产品详情呢? 正确的用法是使用{% url "product_detail" product.id %}。 如果你要同时传递两个或多个参数,你可以参照{% url "product_detail" product.id shop.id %}

 

错误6

---------------------------------------------------------------------

TemplateDoesNotExist at /xxx/

---------------------------------------------------------------------------------

出现原因和解决方案

出现这个错误的原因是你尚未在templates目录创建相应的模板,添加上就好了。

 

错误6

---------------------------------------------------------------------

 ImportError: cannot import name 'Thing2Literal'  AttributeError: module 'pymysql' has no attribute 'install_as_MySQLdb''

---------------------------------------------------------------------------------

出现原因和解决方案

1. pip uninstall PyMySQL
2. pip install -U --force-reinstall pymysql

错误8

---------------------------------------------------------------------

正在更新当中

---------------------------------------------------------------------------------

出现原因和解决方案

出现这个错误的原因是你尚未在templates目录创建相应的模板,添加上就好了。