django2.0 -- xadmin


你将不再是道具,而是人如其名的人


下载安装

现在安装有两种方法,一种是直接 pip 安装,一种是 django 的 app 扩展

pip

pip install git+git://github.com/sshwsfc/xadmin.git@django2

app 扩展

使用 git 克隆对应版本的xadmin:https://github.com/sshwsfc/xadmin/tree/django2放到项目中,并安装对应的依赖库

git clone -b django2 https://github.com/sshwsfc/xadmin.git

pip install django-crispy-forms
pip install django-formtools
pip install httplib2
pip install future
pip install six
pip install django-import-export

setting.py 中注册 app

'xadmin',
'crispy_forms',
'reversion',

主 urls.py 配置

import xadmin
from xadmin.plugins import xversion

xadmin.autodiscover()
xversion.register_models() 

urlpatterns = [
    path('xadmin/', xadmin.site.urls),
]

路由 xadmin.site.urls 不要加引号也不要放在 include() 中, 不然会报错


数据库迁移

python manage.py makemigrations
python manage.py migrate

app 使用 xadmin

在 app 目录下新建 adminx.py, 进行注册, xadmin 会自动检测

import xadmin
from . import models


class UserProfileAdmin(object):
    # 要列出的字段
    list_display = ('id', 'username', 'gender', 'email', 'location', 'session', 'avatar', 'is_active',)
    # 可以搜索的字段
    search_fields = ('name',)
    # 列出可以编辑的字段
    list_editable = ('gender', 'location',)
    # 右侧过滤条件
    list_filter = ('add_time',)
    # icon
    model_icon = "fa fa-group"
    # 下拉框搜索,当有外键指向他时会以ajax方式加载,数据量过大时很有用
    relfield_style = 'fk-ajax'
    ordering = ['id']
    # 后台可选刷新频率
    refresh_times = [3, 5]

# 如果报错 已注册,可以 unregister 先注销
# xadmin.site.unregister(models.UserProfile)
xadmin.site.register(models.UserProfile, UserProfileAdmin)

自定义

基础配置

from xadmin import views

class BaseSetting(object):
    # 开启主题功能
    enable_themes = True
    # 支持切换主题
    use_bootswatch = True


xadmin.site.register(views.BaseAdminView, BaseSetting)

全局配置

from news import models as news_models
from webUser import models as user_models

class GlobalSettings(object):
    site_title = "新闻聚合系统"
    site_footer = "Copyright @2019-2020 新闻聚合系统 All Rights Reserved"
    # 菜单可折叠
    menu_style = "accordion"

    # 自定义新增菜单栏
    def get_site_menu(self):
        return (
            {'title': 'News', 'menus': (
                {'title': '新闻', 'url': self.get_model_url(
                    news_models.NewPost, 'changelist')},
            )},
            {'title': 'User', 'menus': (
                {'title': 'User', 'url': self.get_model_url(
                    user_models.UserProfile, 'changelist')},
                {'title': 'VerifyCode', 'url': self.get_model_url(
                    user_models.VerifyCode, 'changelist')},
            )},
        )

    # 可以重写此方法,使右侧菜单栏只有上面添加的项
    # def get_nav_menu(self):
    #    # 直接返回新增的菜单栏,源码中还有很大一部分的合并功能
    #    site_menu = list(self.get_site_menu() or [])
    #    return site_menu


xadmin.site.register(views.CommAdminView, GlobalSettings)