下载地址:
pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2 -i https://pypi.douban.com/simple/
注册应用:
INSTALLED_APPS = [ ... 'xadmin', 'crispy_forms', 'reversion', ... ] # 修改使用中文界面 LANGUAGE_CODE = 'zh-Hans' # 修改时区 TIME_ZONE = 'Asia/Shanghai'
xadmin有建立自己的数据库模型类,需要进行数据库迁移
python manage.py makemigrations
python manage.py migrate
在总路由中添加xadmin的路由信息
import xadmin xadmin.autodiscover() # version模块自动注册需要版本控制的 Model from xadmin.plugins import xversion xversion.register_models() urlpatterns = [ path(r'xadmin/', xadmin.site.urls), ]
import xadmin from xadmin import views class BaseSetting(object): """xadmin的基本配置""" enable_themes = True # 开启主题切换功能 use_bootswatch = True xadmin.site.register(views.BaseAdminView, BaseSetting) class GlobalSettings(object): """xadmin的全局配置""" site_title = "" # 设置站点标题 site_footer = "" # 设置站点的页脚 menu_style = "accordion" # 设置菜单折叠 xadmin.site.register(views.CommAdminView, GlobalSettings)
# 在当前子应用中创建adminx.py,添加如下代码 # 轮播图 from .models import BannerInfo class BannerInfoModelAdmin(object): list_display=["title","orders","is_show"] xadmin.site.register(BannerInfo, BannerInfoModelAdmin)
# 子应用/apps.py class HomeConfig(AppConfig): name = 'home' verbose_name = '我的首页' # __init__.py default_app_config = "home.apps.HomeConfig"
错误1
# ImportError: cannot import name 'six' # 解决方法 pip install six # 然后找到 Libsite-packages 下的six.py 复制到 django/utils下面 # 问题解决
错误2
# 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 # 问题解决
错误3
# 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 # 问题解决
错误4
# TypeError: render() got an unexpected keyword argument 'renderer' # 跟随错误提示 djangoformsoundfield.py return widget.render( name=self.html_initial_name if only_initial else self.html_name, value=self.value(), attrs=attrs, renderer=self.form.renderer, ) # 改为 return widget.render( name=self.html_initial_name if only_initial else self.html_name, value=self.value(), attrs=attrs, # renderer=self.form.renderer, ) # 问题解决
错误5
# ImportError: cannot import name 'SKIP_ADMIN_LOG' from 'import_export.admin' # 找到:xadminpluginsimportexport.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
注意:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'xadmin', 'crispy_forms', 'corsheaders', 'rest_framework', 'home', ] # 在注册APP的时候 crispy_forms 要放在 xadmin下面否则会报错