django默認是有一個admin的后台管理模塊,但是丑,功能也不齊全,但是大神給我們已經集成好了xadmin后台,我們拿來用即可,但是呢,django已經升級到2.1版本了,xadmin貌似跟不上節奏,那么在集成過程中咱就一步一步填坑吧,這也是一種學習的過程,遇到錯誤,找到錯誤的地方,看看django最新升級都修改了那些,去掉了那些,把相應出錯的地方替換即可。
xadmin源碼地址:https://github.com/sshwsfc/xadmin
下載並解壓:
我們用到的是xadmin文件夾,將xadmin復制到項目的根目錄,與項目同級別。
安裝依賴庫:
激活項目的虛擬環境,cd 到解壓的 xadmin-master目錄,運行一下代碼
1
|
pip3 install
-
r requirements.txt
|
在項目settings.py設置文件中引入:
在項目的urls.py中設置
然后運行:python manage.py makemigrations 建立數據庫遷移文件
這個時候就會引出一系列的錯誤提示
錯誤一:關聯關系ForeignKey引發的錯誤,打開xadmin文件中的模型文件models.py,
凡是出現關聯關系字段的地方全部加上 on_delete=models.CASCADE , 如下圖所示:
錯誤二:模塊包名稱合並修改引發的錯誤
錯誤提示:ModuleNotFoundError: No module named 'django.core.urlresolvers'
這是因為django2.1把from django.core.urlresolvers修改成了django.urls
那么如圖所示將 from django.core.urlresolvers import NoReverseMatch, reverse
修改為:
from django.urls import NoReverseMatch, reverse
錯誤三:出現如下錯誤提示
這是因為,django2.1.1的 forms表單初始化僅一個參數,將 forms.Field.__init__(self, required, widget, label, initial, help_text, *args, **kwargs) 修改為如圖所示:
錯誤四:ImportError: cannot import name 'login' from 'django.contrib.auth.views'
解決辦法:
# 將 website.py 中的 from django.contrib.auth.views import login from django.contrib.auth.views import logout # 修改為 from django.contrib.auth import authenticate, login, logout
錯誤五:ImportError: cannot import name 'QUERY_TERMS' from 'django.db.models.sql.query'
解決辦法:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# django2.1.1版本將xadmin\plugins\filters.py文件中的
from
django.db.models.sql.query
import
LOOKUP_SEP, QUERY_TERMS
# 修改為
from
django.db.models.sql.query
import
LOOKUP_SEP, Query
# 在Django2.0版本中把
from
django.db.models.sql.query
import
LOOKUP_SEP, QUERY_TERMS
# 修改為:
from
django.db.models.sql.query
import
LOOKUP_SEP
from
django.db.models.sql.constants
import
QUERY_TERMS
|
錯誤六:ModuleNotFoundError: No module named 'django.contrib.formtools' 導入fromtools錯誤,版本太低
解決方案:
1
2
3
4
5
|
# 卸載舊版本
pip uninstall django
-
formtools
# 安裝新版本
pip install django
-
formtools
|
錯誤七:
解決方案:
1
2
3
4
5
|
# 把xadmin\plugins\password.py中的
from
django.contrib.auth.views
import
password_reset_confirm
修改為:
from
django.contrib.auth.views
import
PasswordResetConfirmView
|
再把位於75行左右 return后的 password_reset_confirm修改為 PasswordResetConfirmView,如下圖所示
錯誤八:AttributeError: 'Settings' object has no attribute 'MIDDLEWARE_CLASSES'
解決辦法:
1
2
3
4
5
6
7
|
# 將xadmin\plugins\language.py 中的
if
settings.LANGUAGES
and
'django.middleware.locale.LocaleMiddleware'
in
settings.MIDDLEWARE_CLASSES:
修改為:
if
settings.LANGUAGES
and
'django.middleware.locale.LocaleMiddleware'
in
settings.MIDDLEWARE:
|
最后運行:python manage.py makemigrations 創建遷移數據文件
再運行:python manage.py migrate 遷移數據庫
如果在以上過程中出現類似錯誤,請依照錯誤相應修改,錯誤提示的先后順序或許不一樣,但是請仔細閱讀錯誤提示代碼。
錯誤九
ImportError: cannot import name 'QUERY_TERMS'
錯誤日志(error log)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "E:\py_virtualenv\joyoo\lib\site-packages\django_filters\__init__.py", line 4, in <module>
from .filterset import FilterSet
File "E:\py_virtualenv\joyoo\lib\site-packages\django_filters\filterset.py", line 16, in <module>
from .filters import (Filter, CharFilter, BooleanFilter, BaseInFilter, BaseRangeFilter,
File "E:\py_virtualenv\joyoo\lib\site-packages\django_filters\filters.py", line 11, in <module>
from django.db.models.sql.constants import QUERY_TERMS
ImportError: cannot import name 'QUERY_TERMS'
解決辦法(solution)
source code location:..\Lib\site-packages\django_filters\filters.py