xadmin+drf错误集锦

错误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.此时修改报错文件的代码,引入需要的类,用类调用方法,以此获取变量:

你可能感兴趣的:(xadmin+drf错误集锦)