0x05、由於相對/絕對路徑寫錯導致
字段 | 詳細描述 |
---|---|
位置 | apps.users.models.BaseModel(類) |
異常描述 | RuntimeError: Model class apps.courses.models.Course doesn’t declare an explicit app_label and isn’t in an application in INSTALLED_APPS. |
解決方法 | 修改其他app的models引用其他app的model的寫法,即這個錯誤由於導入model的時候,寫錯相對/絕對路徑而引起的,最坑的是,pycharm不給你報錯,而顯示是正常導入的模塊 |
報錯代碼:
RuntimeError: Model class apps.courses.models.Course doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
解決方法如下:
正確解決方法:
爲什麼是這樣引用呢?
大概是因爲,你在項目的settings.py中已經install了這個users的app,所以django知道這個users的app在哪裏,所以引用的時候就不再需要帶上前綴apps.也能正確使用(可能說的不準,僅供參考,歡迎各位指正)
0x06、用於外鍵未正確設置導致的錯誤
字段 | 詳細描述 |
---|---|
位置 | MxOnline\apps\operations\models.py |
異常描述 |
TypeError: init() missing 1 required positional argument: ‘on_delete’
解決方法 | 將涉及到外鍵的地方做相對應的修改,必須加上on_delete這個參數,這個參數表名,如果主鍵的數據刪除了,那麼外鍵的數據應該怎麼辦,這時候可以考慮是否級聯刪除或者設置爲空字段等等,需要具體情況具體分析
# 增加on_delete=models.CASCADE即可
user = models.ForeignKey(UserProfile, verbose_name="用戶", on_delete=models.CASCADE)
0x07、註冊apps後才能在後臺管理系統看得到,及如何修改註冊之後app的顯示名字爲中文(admin/xadmin開發的)
例如:編寫了models之後,是需要再admin/adminx裏面添加註冊APP的信息,如果不添加,就在後臺管理系統看不到的
-
不註冊course app
-
代碼adminx裏面未註冊course
-
將adminx代碼裏面的註釋去掉之後,即可註冊course app
-
修改註冊的COURSE這個app顯示的名字
重啓django、Ctrl+F5刷新即可看到效果:
0x08、如何修改添加某個city之後,提示的描述符不爲“xxx object”的情況
-
代碼實現,在對應的model裏面,重新定義返回的
def __str__(self):return self.name
這個方法,指定返回是name字段
-
修改之後結果:
0x09、如何指定顯示、搜索、過濾、編輯指定的字段/列
-
如何顯示、搜索、過濾、編輯指定的列:
-
可以通過增加下面代實現(在adminx/admin中添加):
class CityAdmin(object):
list_display = ["id", "name", "desc", "add_time"] # 指定顯示某些列/字段
search_fields = ["name", "desc", "add_time"] # 指定搜索的字段/列
list_filter = ["name", "desc", "add_time"] # 指定可以選擇過濾的字段/列
list_editable = ["name", "desc"] # 指定可以在列表那裏就能修改的字段(方便修改,不用點進去也能編輯那種)
修改代碼之後,結果如下:
再來一個玩法:
如果需要也過濾model裏面的外鍵的話,是通過這樣的方式來使用:
class CourseAdmin(object):
list_display = ["name", "desc", "detail", "degree", "learn_times", "students"]
search_fields = ["name", "desc", "detail", "degree", "students"]
list_filter = ["name", "teacher__name", "desc", "detail", "learn_times", "degree", "students"] # 外鍵可以通過"course__name"這種添加雙下劃線,然後指定某個字段來設置過濾
list_editable = ["degree", "desc"]
其中teacher字段就是外鍵,Django裏面設置外鍵有點像是引用整個model字段,然後使用這個model指定name字段來作過濾/搜索.
感謝認真讀完這篇教程的您
先別走唄,這裏有可能有你需要的系列文章:
1、Django踩坑記錄系列
2、或者點擊我的個人博客進行查看這系列文章