1、安装xadmin
pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2
2、setting.py中增加配置
# 在注册APP的时候 crispy_forms 要放在 xadmin下面否则会报错
INSTALLED_APPS = [
...
'xadmin',
'crispy_forms',
'reversion',
...
]
3、xadmin有建立自己的数据库模型类,需要进行数据库迁移
python manage.py makemigrations
python manage.py migrate
4、 在总路由中添加xadmin的路由信息
import xadmin
urlpatterns = [
path(r'xadmin/', xadmin.site.urls),
]
错误解决
# ImportError: cannot import name 'six'
# 解决方法
pip install six
# 然后找到 Lib\site-packages 下的six.py 复制到 django/utils下面
# 问题解决
# ImportError: cannot import name 'python_2_unicode_compatible'
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
# 问题解决
# ImportError: cannot import name 'FieldDoesNotExist'
from django.db.models.fields import FieldDoesNotExist
#改成
from django.core.exceptions import FieldDoesNotExist
# 问题解决
# ImportError: cannot import name 'pretty_name'
from django.forms.forms import pretty_name
# 改为
from django.forms import forms
# 问题解决
# ImportError: cannot import name 'SKIP_ADMIN_LOG' from 'import_export.admin'
# 找到:xadmin\plugins\importexport.py
# 将from import_export.admin import DEFAULT_FORMATS, SKIP_ADMIN_LOG, TMP_STORAGE_CLASS 大概在48行
# 改为
from import_export.admin import DEFAULT_FORMATS, ImportMixin
# 并且找到下面报错的地方
def get_skip_admin_log(self):
if self.skip_admin_log is None:
return SKIP_ADMIN_LOG
else:
return self.skip_admin_log
def get_tmp_storage_class(self):
if self.tmp_storage_class is None:
return TMP_STORAGE_CLASS
else:
return self.tmp_storage_class
# 改为
def get_skip_admin_log(self):
if self.skip_admin_log is None:
return ImportMixin.skip_admin_log
else:
return self.skip_admin_log
def get_tmp_storage_class(self):
if self.tmp_storage_class is None:
return ImportMixin.tmp_storage_class
else:
return self.tmp_storage_class
# ModuleNotFoundError: No module named 'django.contrib.staticfiles.templatetags'
if 'django.contrib.staticfiles' in settings.INSTALLED_APPS:
from django.contrib.staticfiles.templatetags.staticfiles import static
else:
from django.templatetags.static import static
# 改为
# if 'django.contrib.staticfiles' in settings.INSTALLED_APPS:
# from django.contrib.staticfiles.templatetags.staticfiles import static
# else:
from django.templatetags.static import static
# 问题解决
# TypeError: render() got an unexpected keyword argument 'renderer'
extra_apps目录找到xadmin/views/dashboard.py,大概在36行的位置加个参数 renderer=None
# dashboard.py
# 36行修改前
def render(self, name, value, attrs=None):
# 修改后
def render(self, name, value, attrs=None, renderer=None):
# 问题解决