错误1. 引入xadmin后报错No module named 'django.core.urlresolvers'
from django.core.urlresolversimport NoReverseMatch, reverse
解决方法就是:
from django.urlsimport NoReverseMatch, reverse
如果还有以下错误如此更改:
2.xadmin源码地址:https://github.com/sshwsfc/xadmin
借鉴我的另外一篇文章
https://www.jianshu.com/p/f5bb30ca7281
下载并解压:
我们用到的是xadmin文件夹,将xadmin复制到项目的根目录,与项目同级别。
安装依赖库:
激活项目的虚拟环境,cd 到解压的 xadmin-master目录,运行一下代码
1pip3 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'
解决办法
# django2.1.1版本将xadmin\plugins\filters.py文件中的
from django.db.models.sql.query importLOOKUP_SEP, QUERY_TERMS
# 修改为
from django.db.models.sql.query importLOOKUP_SEP, Query
# 在Django2.0版本中把
from django.db.models.sql.query importLOOKUP_SEP, QUERY_TERMS
# 修改为:
from django.db.models.sql.query importLOOKUP_SEP
from django.db.models.sql.constants importQUERY_TERMS
错误六:ModuleNotFoundError: No module named 'django.contrib.formtools' 导入fromtools错误,版本太低
解决方案:
# 卸载旧版本
pip uninstall django-formtools
# 安装新版本
pip install django-formtools
错误七:
解决方案:
# 把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'
解决办法:
# 将xadmin\plugins\language.py 中的
if settings.LANGUAGES and 'django.middleware.locale.LocaleMiddleware'insettings.MIDDLEWARE_CLASSES:
修改为:
if settings.LANGUAGES and 'django.middleware.locale.LocaleMiddleware ' in settings.MIDDLEWARE:
最后运行:python manage.py makemigrations 创建迁移数据文件
再运行:python manage.py migrate 迁移数据库
错误九 * TypeError: __init__() missing 1 required positional argument: 'on_delete'
解决方案:
定义外键的时候需要加上 on_delete=;
即:contract = models.ForeignKey(Contract, on_delete=models.CASCADE)
原因如下:
django 升级到2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常:
TypeError: init() missing 1 required positional argument: ‘on_delete’
错误十 *
from import_export.admin import DEFAULT_FORMATS, SKIP_ADMIN_LOG, TMP_STORAGE_CLASS
ImportError: cannot import name 'SKIP_ADMIN_LOG'
解决办法*
分析步骤:
1.打开 import_export/admin.py,搜索“SKIP_ADMIN_LOG”,发现确实没有SKIP_ADMIN_LOG
变量,只有一个方法 get_skip_admin_log(self)
,此方法返回了skip_admin_log,而这个方法是在ImportMixin 类中定义的。
所以猜测,由于版本原因,旧版本中admin.py 是有SKIP_ADMIN_LOG的,新版本中放在了类中。而git上的项目用的是旧版包,我们拉取到本地之后下载的是新包,所以无法引用。
2.此时修改报错文件的代码,引入需要的类,用类调用方法,以此获取变量:
网友评论