zoukankan      html  css  js  c++  java
  • 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下面否则会报错

     

  • 相关阅读:
    git can't merge 的处理 代码冲突问题的解决
    react 父组件向子组件传递函数
    node fs 文件/目录 删除
    node 调用Python exec child_process 模块
    node 设置自动启用定时任务控件 node-schedule
    Python 安装
    常见Python 中pip用法(待继续添加)
    机器审核图片学习(2)安装pornDetector所用环境-python、scikit-learn、opencv
    机器审核图片学习(1)pornDetector
    机器学习工具
  • 原文地址:https://www.cnblogs.com/wtil/p/12363875.html
Copyright © 2011-2022 走看看