小編我前面已經寫過一篇關於Django常見錯誤的文章了,見Django常見錯誤總結: 細數我們一起走過的大坑。該文比較適合新手閱讀,防止學習Django過程中入坑。今天小編我要總結實際Django開發過程中和debug過程中經常碰到的錯誤信息以及如何解決它們。本文適合所有Python Web開發學習者和工作者,值得加入你的微信收藏。Django之所以優秀,就是因為它在開發環境下提供了豐富的debug報錯信息,從而減少了在生產環境下產生bug。本文會嘗試著為那些錯誤信息提供解決方案。
錯誤1
---
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 makemigrations和python manage.py migrate.
錯誤2
----
ImportError: No module named 'MySQLdb'
-
出現原因和解決方案
出現這個錯誤的原因是因為試圖使用MySQL作為資料庫,卻沒有安裝相應模塊。解決方案如下:
import pymysql
pymysql.install_as_MySQLdb()
錯誤3
----
RuntimeWarning: DateTimeField received a naive datetime
-
出現原因和解決方案
出現這個錯誤的原因在於你沒有在settings.py裡設置時區,Django不知道提供哪個時區的時間好。小編強烈建議你給所有的Django項目設置時區。如果你要使用中國時間,可以使用TIME_ZONE = 'Asia/Shanghai'。請注意: 在Django的配置文件裡有兩個配置參數是跟時間與時區有關的,分別是TIME_ZONE和USE_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 = False, TIME_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目錄創建相應的模板,添加上就好了。
參考文章:
http://blog.51cto.com/daibaiyang119/2066741