Django3.0.3使用Xadmin

下载地址:

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),
]

给xadmin设置基本站点配置信息

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)

模型到xadmin中

# 在当前子应用中创建adminx.py,添加如下代码
# 轮播图
from .models import BannerInfo
class BannerInfoModelAdmin(object):
    list_display=["title","orders","is_show"]
xadmin.site.register(BannerInfo, BannerInfoModelAdmin)

修改后端xadmin中子应用名称

# 子应用/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下面否则会报错

 

原文地址:https://www.cnblogs.com/wtil/p/12363875.html