天天看點

django內建 xadmin 踩的坑

一、下載下傳源代碼,并安裝源碼到django項目

源代碼官網:https://github.com/sshwsfc/xadmin/tree/django2

1、安裝依賴

将源代碼下載下傳到本地,并進入到源代碼目錄,執行

pip install -r requirements.txt

備注:一般主要是

django-crispy-forms django-formtools httplib2 django-reversion django-import-export future six

依賴包

2、在django的根項目路徑下,建立 extra_app 包,并把源碼包裡面的 xadmin 目錄放進去

## ① settings.py 配置
如果采用源碼放在django下的 extra_apps 檔案内的方式:則需将 extra_apps 檔案加入到項目環境變量中去,并把extra_apps包設定為源碼檔案夾
sys.path.insert(0, os.path.join(BASE_DIR, 'extra_app'))

## ②注冊相關app, 找到INSTALLED_APPS,追加配置如下
INSTALLED_APPS = [
            ......    
            'xadmin',
            'crispy_forms',
            'reversion',
        ]

## ③設定語言和時間格式
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = True
DATETIME_FORMAT = 'Y-m-d H:i:s'
DATE_FORMAT = 'Y-m-d'

## ④将 extra_apps 包 安裝到源碼根目錄
在 pycharm 中 extra_apps 上右擊 --> Mark Directory as -->  Source Root

## ⑤修改路由映射 url.py
import xadmin

urlpatterns = [
    path('xadmin/', xadmin.site.urls),
]
           

備注:pip直接安裝xadmin插件

pip install django-xadmin

django內建 xadmin 踩的坑
django內建 xadmin 踩的坑
django內建 xadmin 踩的坑

二、問題總結

1、No module named 'MySQLdb’

在項目的 __init__.py 檔案中增加
import pymysql
pymysql.install_as_MySQLdb()
           

2、子產品包名稱合并修改引發的錯誤

錯誤提示:ModuleNotFoundError: No module named 'django.core.urlresolvers'
原因:django2.1把from django.core.urlresolvers修改成了django.urls
解決:from django.core.urlresolvers import NoReverseMatch, reverse
           

3、關聯關系ForeignKey引發的錯誤

錯誤類型:TypeError: __init__() missing 1 required positional argument: 'on_delete'
原因:在django2.1 以上版本中,凡是出現關聯關系字段的地方全部加上 on_delete=models.CASCADE 
解決方法:on_delete=models.CASCADE
           

4、參數缺失

錯誤類型:TypeError: __init__() takes 1 positional argument but 6 were given

django2.1.1的 forms表單初始化僅一個參數,
将 forms.Field.__init__(self, required, widget, label, initial, help_text, *args, **kwargs)  
修改為 forms.Field.__init__(self)
           

5、ImportError: cannot import name ‘login’ from 'django.contrib.auth.views’

from django.contrib.auth.views import login
from django.contrib.auth.views import logout

# 修改為
from django.contrib.auth import authenticate, login, logout
           

6、ImportError: cannot import name ‘QUERY_TERMS’ from 'django.db.models.sql.query’

# 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
           

7、ImportError: cannot import name ‘password_reset_confirm’ from 'django.contrib.auth.views’

# 把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
           

8、AttributeError: ‘Settings’ object has no attribute 'MIDDLEWARE_CLASSES’

# 将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:
           

9、ModuleNotFoundError: No module named ‘django.contrib.formtools’ 導入fromtools

# 解除安裝舊版本
pip uninstall django-formtools
 
# 安裝新版本
pip install django-formtools
           

最後運作:python manage.py makemigrations 建立遷移資料檔案

再運作:python manage.py migrate 遷移資料庫