django1.11+python3.6配置xadmin

  1. 创建extra_apps的包,并将extra_apps这个包作为sources Root

  2. github下载:https://github.com/nocmt/Xadmin1.11.x/archive/master.zip,将xadmin的包下载并解压

  3. 将压缩包解压找到里面的下xadmin文件夹,将xadmin文件夹放在extra_apps

  4. settings.py中设置

import sys
sys.path.append(os.path.join(BASE_DIR, 'extra_apps'))
INSTALLED_APPS = [
   ...
   'xadmin',   # 你添加这个
   'crispy_forms'  # 还有这个
]
  1. 安装相关依赖包
pip install six
pip install future
pip install httplib2
pip install django-reversion
pip install django-formtools
pip install django-crispy-forms
  1. 生成迁移文件
python manage.py makemigrations
python manage.py migrate
  1. 修改路由文件urls.py
import xadmin

urlpatterns = [
    # url(r'^admin/', admin.site.urls), 
    url(r'^xadmin/', xadmin.site.urls), # 新路由
]

配置xadmin和模型

  1. 在对应的app下创建adminx.py文件
  2. EmailVerifyRecord模型为例,在user/adminx.py下配置
import xadmin
from .models import EmailVerifyRecord
from xadmin import views


class BaseSetting():
    enable_themes = True # 开启主题功能
    use_bootswatch = True


class GlobalSettings():
    site_title = '教育系统' # 左上角
    site_footer = '教育系统在线网站' # 底部
    menu_style = 'accordion'  # 折叠目录

class EmailVerifyRecordAdmin():
    list_display = ['code', 'email', 'send_type', 'send_time']  # 显示字段
    search_fields = ['code', 'email', 'send_type']  # 搜索字段
    list_filter = ['code', 'email', 'send_type', 'send_time']   # 过滤器

xadmin.site.register(EmailVerifyRecord, EmailVerifyRecordAdmin)
xadmin.site.register(views.BaseAdminView,BaseSetting)    # 主题
xadmin.site.register(views.CommAdminView,GlobalSettings) # 全局配置

  1. 出现问题:在创建Model的时候,如果存在类型是DateTimeField的字段,则在xadmin后端管理界面里,对该Model进行添加操作的时候,会报list index out of range
  2. 解决方式:
    1. xadmin/widgets.py中修改源码。大约在76行

    2. 源代码为:


      image.png
    3. 修改代码为


      image.png
    4. 修改部分的代码为

    input_html = [ht for ht in super(AdminSplitDateTime, self).render(name, value,   attrs).split('/><') if ht != '']
    input_html[0] = input_html[0] + "/>"
    input_html[1] = "<" + input_html[1]
    

点击添加小组件时,出现报错build_attrs() got an unexpected keyword argument 'name',解决方法为:去django\forms\widgets.py在build_attrs()函数的定义处添加一个**kwargs

def build_attrs(self, base_attrs, extra_attrs=None# , **kwargs):
    "Helper function for building an attribute dictionary."
    attrs = base_attrs.copy()
    if extra_attrs is not None:
        attrs.update(extra_attrs)
    return attrs

app的名字改成中文,以users为例

users/__init__.py中配置

# 添加默认的app_config使app中文名生效
default_app_config = 'users.apps.UsersConfig'

users/apps.py中配置

from django.apps import AppConfig


class UsersConfig(AppConfig):
    name = 'users'
    verbose_name = '用户信息'

你可能感兴趣的:(django1.11+python3.6配置xadmin)