基础用法

  1. model_icon = "fa fa-folder" # 图标
  2. list_display = ('title', 'type', 'operations') # 列表显示字段
  3. list_display_links = ('title',) # 链接字段
  4. # search_fields = () # 搜索字段
  5. # list_filter = () # 过滤字段
  6. readonly_fields = ('path',) # 只读字段
  7. ordering = ('-id',) # 列表排序
  8. # exclude = () # 隐藏字段
  9. # relfield_style = 'fk-ajax # 外键使用时,不一次性加载所有数据,已搜索+ajax方式获取
  10. # list_editable = () # 可在连表页编辑的字段
  11. form = CategoryForm # 设置form
  12. use_related_menu = False # 禁用relate插件
  13. hidden_menu = True # 不在菜单中显示
  14. Admin: # 可重写view中方法
  15. self.form # form 类
  16. self.form_obj # form对象
  17. List_display_links = None #禁用编辑链接
  18. def has_add_permission(self, request):
  19. # 禁用添加按钮
  20. return False
  21. def has_delete_permission(self, request, obj=None):
  22. # 禁用删除按钮
  23. return False
  24. def get_actions(self, request):
  25. # 在actions中去掉‘删除’操作
  26. actions = super(GradesManagementAdmin, self).get_actions(request)
  27. if request.user.username[0].upper() != 'J':
  28. if 'delete_selected' in actions:
  29. del actions['delete_selected']
  30. return actions

form_layout 使用

  1. # 导入相关
  2. from xadmin.layout import Main, Fieldset, Row, Side
  3. # xxxxAdmin中定义
  4. form_layout = (
  5. Main( # 里面的内容在中间显示,主显示区域
  6. # 里面可写Fieldset
  7. Fieldset('标题', '字段1', '字段2',..., '字段n'),
  8. # 可有多个fieldset 每个fieldset为单独的一个 panel
  9. Fieldset(
  10. '标题2',
  11. Row('字段1', '字段2') # 字段1 字段2 将
  12. )
  13. ),
  14. Side( # 里面的内容在右边显示
  15. )
  16. )

自定义页面

1. 创建view

  1. # views.py
  2. from xadmin.views import CommAdminView
  3. class TestView(CommAdminView):
  4. """
  5. 可根据情况基础xadmin其他view类,如表单FormAdminView等
  6. 重新请求方法
  7. """
  8. def get(self, request):
  9. """
  10. get 请求
  11. """
  12. # 获取xadmin默认的context数据
  13. context = super().get_context()
  14. title = "测试页面"
  15. context["breadcrumbs"].append({'url': '', 'title': title}) # 设置面包屑
  16. context["title"] = title # 设置标题
  17. // ...
  18. return render(request, 'test.html', context)

2. 创建模板

  1. <!-- test.html -->
  2. {% extends 'xadmin/base_site.html' %}
  3. {% load i18n %}
  4. {% load crispy_forms_tags %}
  5. {% load xadmin_tags %}
  6. {% block extrastyle %}
  7. <!-- 加载自定义css样式 或编写 css样式, 其它标签可查看base_site.html文件进行修改 -->
  8. {% vendor 'xadmin.form.css' %}
  9. {% endblock %}
  10. {% block content-nav %}
  11. {% endblock %}
  12. {% block content %}
  13. 这是test页面内容
  14. {% endblock %}
  15. {% block extrabody %}
  16. {% vendor 'xadmin.plugin.portal.js' 'xadmin.page.form.js' %}
  17. {% endblock %}

3. 修改菜单 和 将TestView url注册到xadmin中

  1. # adminx.py
  2. import xadmin
  3. from xadmin import views
  4. from . import models
  5. from .views.admin import WebsiteOptions
  6. @xadmin.sites.register(views.CommAdminView)
  7. class GlobalSetting:
  8. def get_site_menu(self):
  9. """
  10. 从写该方法,返回自定义菜单数据
  11. xadmin get_nav_menu()方法自动生成菜单前会调用该方法
  12. return list
  13. perm 调用了 get_model_perm()方法 返回的是 : '%s.%s_%s' % (model._meta.app_label, name, model._meta.model_name)
  14. [{'title': 'apps.py中第一的名称', 'menus': [{'title': '菜单1', 'url': 'url', 'icon': None, 'perm': '', 'order': 7}, ...],'first_url': '第一个菜单url'}, ...]
  15. """
  16. // ... 具体格式
  17. return menu_list
  18. def change_site_menu(self, site_menu):
  19. """
  20. 该方法为自己添加的在 get_nav_menu()方法 返回菜单前执行
  21. 用户修改现有菜单数据
  22. """
  23. # 在websiteAPP下添加新菜单
  24. site_menu[0]['menus'].append({
  25. 'title': '测试页面',
  26. 'url': '/admin/website/test/',
  27. 'icon': None,
  28. 'order': 0})
  29. return site_menu
  30. # 将 TestView url注册到xadmin中
  31. xadmin.site.register_view('website/test/', TestView, name='test')