美文网首页
xadmin+drf错误集锦

xadmin+drf错误集锦

作者: 幼姿沫 | 来源:发表于2021-02-25 14:27 被阅读0次

    错误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错误集锦

          本文链接:https://www.haomeiwen.com/subject/gktufltx.html