一、引入报错:ImportError: cannot import name 'six' from 'django.utils'
解决办法:
在python3.x/site-packages中找到six.py文件,
将six.py文件复制到django/utils目录下
# 将site-packages/haystack/inputs.py 中
from django.utils.encoding import force_text, python_2_unicode_compatible
# 改为
from django.utils.encoding import force_text
from django.utils.six import python_2_unicode_compatible
二、找不到模块:No module named 'django.core.urlresolvers'
因为Django 3.x 已经把django.core.urlresolvers模块的内容迁移至django.urls中,所以django.core.urlresolvers模块中的所有内容均可在django.urls中找到。
解决办法:
from django.core.urlresolvers import reverse
#替换成:
from django.urls import reverse
三、找不到模块:No module named 'django.contrib.staticfiles.templatetags'
解决办法:
from django.contrib.staticfiles.templatetags.staticfiles import static
# 替换成:
from django.templatetags.static import static
四、Django \xadmin\views\dashboard.py报错TypeError: init() takes 1 positional argument but 6 were given
解决办法:
forms.Field.init(self, required, widget, label, initial, help_text, *args, **kwargs)
#替换成:
forms.Field.init(self)
五、引入报错:ImportError: cannot import name 'login' from 'django.contrib.auth.views'
django已将login类和logout类改为LoginView和LogoutView
解决办法:
from django.contrib.auth.views import login#logout
#替换为:
from django.contrib.auth.views import LoginView#LogoutView
六、引入报错:ImportError: cannot import name 'QUERY_TERMS' from 'django.db.models.sql.query'
解决办法:
from django.db.models.sql.query import LOOKUP_SEP, QUERY_TERMS
#替换成:
from django.db.models.sql.query import LOOKUP_SEP, Query
#同时,filter.py 文件中第47行
if len(parts) > 1 and parts[-1] in QUERY_TERMS:
#替换成:
if len(parts) > 1 and parts[-1] in Query:
七、ModuleNotFoundError: No module named 'django.contrib.formtools'
解决办法:
# 卸载旧版本
pip uninstall django-formtools
# 安装新版本
pip install django-formtools
八、cannot import name 'password_reset_confirm' from 'django.contrib.auth.views'
解决办法:
from django.contrib.auth.views import password_reset_confirm
#替换成:
from django.contrib.auth.views import PasswordResetConfirmView
#第77行中
return password_reset_confirm(...)
#替换成:
return PasswordResetConfirmView(...)
九、AttributeError:'Settings' object has no attribute 'MIDDLEWARE_CLASSES'
解决办法:
if settings.LANGUAGES and 'django.middleware.locale.LocaleMiddleware' in settings.MIDDLEWARE_CLASSES:
#替换成:
if settings.LANGUAGES and 'django.middleware.locale.LocaleMiddleware' in settings.MIDDLEWARE:
十、runserver时抛错:'Media' object has no attribute 'add_js'
解决办法:
# 将xadmin的util.py文件下
def vendor(*tags):
media = Media()
for tag in tags:
file_type = tag.split('.')[-1]
files = xstatic(tag)
if file_type == 'js':
media.add_js(files)
elif file_type == 'css':
media.add_css({'screen': files})
return media
# 替换成:
def vendor(*tags):
css = {'screen': []}
js = []
for tag in tags:
file_type = tag.split('.')[-1]
files = xstatic(tag)
if file_type == 'js':
js.extend(files)
elif file_type == 'css':
css['screen'] += files
return Media(css=css, js=js)
十一、runserver时抛错:'DateTimeField' object has no attribute 'rel'
解决办法:
# \xadmin\views\list.py中228行
if isinstance(field.rel, models.ManyToOneRel):
# 替换成:
if isinstance(field.remote_field, models.ManyToOneRel):
# 其他有关.rel的报错,都从相应的.py文件中进行修改
十二、点击主页“添加小组件”报错:render() got an unexpected keyword argument 'renderer'
解决办法:
错误发生在Python\Python38\Lib\site-packages\django\forms\boundfield.py 中as_widget函数(第79行)
def as_widget(self, widget=None, attrs=None, only_initial=False):
"""
Render the field by rendering the passed widget, adding any HTML
attributes passed as attrs. If a widget isn't specified, use the
field's default widget.
"""
widget = widget or self.field.widget
if self.field.localize:
widget.is_localized = True
attrs = attrs or {}
attrs = self.build_widget_attrs(attrs, widget)
if self.auto_id and 'id' not in widget.attrs:
attrs.setdefault('id', self.html_initial_id if only_initial else self.auto_id)
return widget.render(
name=self.html_initial_name if only_initial else self.html_name,
value=self.value(),
attrs=attrs,
renderer=self.form.renderer,
)
但实际引起错误的文件是 xadmin\views\dashboard.py WidgetTypeSelect类中render函数第36行
def render(self, name, value, attrs=None):
# 替换成:
def render(self, name, value, attrs=None, renderer=None):
不过后期还会出问题,所以修改代码后,同时也将上述代码中的renderer=self.form.renderer, 注释掉
十三、手动填加日志报错:'ManyToOneRel' object has no attribute 'to'
解决办法:\xadmin\plugins\quickform.py中第80行
self.add_url, (_('Create New %s') % self.rel.to._meta.verbose_name), name
# 替换成:
self.add_url, (_('Create New %s') % self.rel), name
十四、修改models时报错:list index out of range
解决办法:
报错指向xadmin\widgets.py in render, line 80
def render(self, name, value, attrs=None):
if DJANGO_11:
input_html = [ht for ht in super(AdminSplitDateTime, self).render(name, value, attrs).split('\n') if ht != '']
# 替换成:
def render(self, name, value, attrs=None):
if DJANGO_11:
input_html = [ht for ht in super(AdminSplitDateTime, self).render(name, value, attrs).split('/><') if ht != '']
input_html[0] = input_html[0] + "/>"
input_html[1] = "<" + input_html[1]
十五、删除用户时报错:get_deleted_objects() takes 3 positional arguments but 5 were given
解决办法:xadmin\views\delete.py中第35行
[self.obj], self.opts, self.request.user, self.admin_site, using
# 替换成:
[self.obj], self.request.user, self.admin_site # 删除self.opts和using