环境:
1、python 3.7.0
2、django 2.2.1
问题1:IndexError at /xadmin/db_model/user/10019678227105/update/
list index out of range
解决办法:
1、修改 /xadmin/widgets.py 文件,修改 render() 方法的返回值。注释第 78 - 81 行,并添加新的返回。
def render(self, name, value, attrs=None):
if DJANGO_11:
input_html = [ht for ht in super(AdminSplitDateTime, self).render(name, value, attrs).replace(
'/><input', '/>\n<input').split('\n') if ht != '']
# return mark_safe('<div class="datetime clearfix"><div class="input-group date bootstrap-datepicker"><span class="input-group-addon"><i class="fa fa-calendar"></i></span>%s'
# '<span class="input-group-btn"><button class="btn btn-default" type="button">%s</button></span></div>'
# '<div class="input-group time bootstrap-clockpicker"><span class="input-group-addon"><i class="fa fa-clock-o">'
# '</i></span>%s<span class="input-group-btn"><button class="btn btn-default" type="button">%s</button></span></div></div>' % (input_html[0], _(u'Today'), input_html[1], _(u'Now')))
return input_html[0] # 添加新的返回
else:
return super(AdminSplitDateTime, self).render(name, value, attrs)
问题2:ImportError: cannot import name 'javascript_catalog' from 'django.views.i18n'
解决方法:
1、修改 settings.py 文件中 INSTALLED_APPS 项,添加 django.conf。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 集成 xadmin
'xadmin',
'crispy_forms',
'reversion',
'django.conf', # 添加
'db_model',
'rest_framework',
'api',
]
2、修改 /xadmin/sites.py 文件,注释第 355 - 358 行,并导入 JavaScriptCatalog 类,修改返回。
def i18n_javascript(self, request):
"""
Displays the i18n JavaScript that the Django admin requires.
This takes into account the USE_I18N setting. If it's set to False, the
generated JavaScript will be leaner and faster.
"""
# if settings.USE_I18N:
# from django.views.i18n import javascript_catalog
# else:
# from django.views.i18n import null_javascript_catalog as javascript_catalog
from django.views.i18n import JavaScriptCatalog
return JavaScriptCatalog().get(request=request, **{'packages': 'django.conf+xadmin'})
问题3:AttributeError at /xadmin/db_model/user/10019678227105/update/
'XxxxField' object has no attribute 'rel'
解决办法:
1、将错误对应地方的 rel 字段改成 remote_field,例如:
# if isinstance(f.rel, models.ManyToOneRel):
if isinstance(f.remote_field, models.ManyToOneRel):
问题4:ModuleNotFoundError: No module named 'django.core.urlresolvers'
解决方法:修改所有引入 django.core.urlresolvers 包的文件,修改如下:
#from django.core.urlresolvers import reverse
from django.urls import reverse
注意:引用 NoReverseMatch 类的地方也要修改,如:
#from django.core.urlresolvers import NoReverseMatch
from django.urls import NoReverseMatch
问题5:TypeError: __init__() missing 1 required positional argument: 'on_delete'
解决方法:修改 models.py 里面所有报错的地方,添加 on_delete=CASCADE,并导入相应的包:from django.db.models import CASCADE,如:
# user = models.ForeignKey(AUTH_USER_MODEL, verbose_name=_(u"user"), blank=True, null=True)
# 添加 on_delete=CASCADE
user = models.ForeignKey(AUTH_USER_MODEL, verbose_name=_(u"user"), blank=True, null=True,on_delete=CASCADE)
问题6:TypeError: __init__() takes 1 positional argument but 6 were given
解决方法:打开报错文件 \xadmin\views\dashboard.py 第 284 - 285 行,修改如下:
# forms.Field.__init__(self, required, widget, label, initial, help_text,
# *args, **kwargs)
forms.Field.__init__(self)
问题7: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 login,logout
问题8: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
问题9:ImportError: cannot import name 'password_reset_confirm' from 'django.contrib.auth.views'
解决方法:修改报错文件 \xadmin\plugins\passwords.py 导入的包,修改如下:
# from django.contrib.auth.views import password_reset_confirm
from django.contrib.auth.views import PasswordResetConfirmView
然后修改用到的位置 第 78 - 83 行,修改如下:
def do_view(self, request, uidb36, token, *args, **kwargs):
context = super(ResetPasswordComfirmView, self).get_context()
# return password_reset_confirm(request, uidb36, token,
# template_name=self.password_reset_confirm_template,
# token_generator=self.password_reset_token_generator,
# set_password_form=self.password_reset_set_form,
# post_reset_redirect=self.get_admin_url('xadmin_password_reset_complete'),
# current_app=self.admin_site.name, extra_context=context)
return PasswordResetConfirmView(request, uidb36, token,
template_name=self.password_reset_confirm_template,
token_generator=self.password_reset_token_generator,
set_password_form=self.password_reset_set_form,
post_reset_redirect=self.get_admin_url('xadmin_password_reset_complete'),
current_app=self.admin_site.name, extra_context=context)
问题10:AttributeError: 'Settings' object has no attribute 'MIDDLEWARE_CLASSES'
解决方法:修改 admin\plugins\language.py 第 24 行,修改如下:
# if settings.LANGUAGES and 'django.middleware.locale.LocaleMiddleware' in settings.MIDDLEWARE_CLASSES:
if settings.LANGUAGES and 'django.middleware.locale.LocaleMiddleware' in settings.MIDDLEWARE: