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
创建 extra_app 包,并把源码包里面的 xadmin 目录放进去
将 extra_apps 包 安装到源码根目录
修改路由映射

二、问题总结

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 迁移数据库

发布了319 篇原创文章 · 获赞 140 · 访问量 82万+

猜你喜欢

转载自blog.csdn.net/m0_37886429/article/details/103291362