xadmin开发后台管理系统

Xadmin开发后台管理系统

添加小头像

https://blog.csdn.net/qq_34964399/article/details/80303544?utm_source=blogxgwz5

导航栏设置

https://www.cnblogs.com/adc8868/p/7506973.html

管理器常用显示设置

https://blog.csdn.net/weixin_33127753/article/details/80897240

添加插件

比如要做一个二级联动过滤查询数据,查找当前用户所办的套餐。

1、添加linkageFilter.py文件

在虚拟环境中找到/Lib/site-packages/xadmin/plugins,在该文件夹下添加一个linkDataFilter.py文件,内容如下:

from xadmin.views import BaseAdminPlugin, DeleteAdminView
from xadmin.views.edit import CreateAdminView, UpdateAdminView
import xadmin
​
# 点击增加记录时触发
class LinkageAddFilter(BaseAdminPlugin):
 # 默认不加载,只在需要加载的options中设置True来加载
 is_execute = False
​
 def init_request(self,*arg,**kwargs):
 # return self.bool(is_execute)
 return self.is_execute
​
 def get_media(self, media):
 # 此处用来加入我们自己的js文件
 media = media + self.vendor("xadmin.self.select.js")
 return media
​
# 点击更新记录时触发
class LinkageUpdateFilter(BaseAdminPlugin):
 # 默认不加载,只在需要加载的options中设置True来加载
 is_execute = False
​
 def init_request(self,*arg,**kwargs):
 # return self.bool(is_execute)
​
 return self.is_execute
​
 def get_media(self, media):
 # 此处用来加入我们自己的js文件
​
 media = media + self.vendor("xadmin.self.update_select.js")
 return media
​
# 点击删除记录时触发
class LinkageDeleteFilter(BaseAdminPlugin):
 # 默认不加载,只在需要加载的options中设置True来加载
 is_execute = False
​
 def init_request(self,*arg,**kwargs):
 # return self.bool(is_execute)
 return self.is_execute
​
 def get_media(self, media):
 # 此处用来加入我们自己的js文件
 media = media + self.vendor("xadmin.self.delete.js")
 return media
​
xadmin.site.register_plugin(LinkageAddFilter, CreateAdminView)
xadmin.site.register_plugin(LinkageUpdateFilter, UpdateAdminView)
xadmin.site.register_plugin(LinkageDeleteFilter, DeleteAdminView)

2、在plugins文件夹下的<u style="box-sizing: border-box;"></u>init<u style="box-sizing: border-box;"></u>.py中PLUGINS = ()元组中添加linkDataFilter

%5CUsers%5CLDCPC%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1541747845932.png

3、写js文件

在虚拟环境中找到/Lib/site-packages/xadmin/static/xadmin/js,在该文件夹下条件xadmin.self.select.js、xadmin.self.update_select.js和xadmin.self.delete_select.js三个文件

其中xadmin.self.select.js内容如下:

(function($){
​
  function linkage_query(){

 // 获取用户办的套餐
 $("#div_id_package").click(function () {
 // 从导航栏处获取用户名
 var master_name = $('#top-nav').find('strong').text();
 master_name =  master_name.substring(4);
 url = "selectInfo/?master=" + master_name;
      getSecNav(url,'#id_package');
 });
​
    function getSecNav(url,id_type){
      $.ajax({
        type:"GET",
        url:url,
        async:true,
        beforeSend:function(xhr){
          xhr.setRequestHeader("X-CSRFToken", $.getCookie("csrftoken"))
        },
        success:function(data){
​
 $(id_type)[0].selectize.clearOptions(); //二级select清空选项
 keys = Object.keys(data);//将JSON转换);
 for (var i = 0; i < keys.length; i++) {
 console.log(data[i]);
 var item = data[keys[i]];
​
 var test = {text: item.name, value: item.value, $order: i + 1}; //遍历数据,拼凑出selectize需要的格式
 $(id_type)[0].selectize.addOption(test); //添加数据
 }
​
        },
        error:function(xhr){
          console.log(xhr);

        }
      });
    }
  }
  linkage_query();
})(jQuery)
%5CUsers%5CLDCPC%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1541748764825.png

4、urls.py和views.py处理js发起的请求

5、adminx.py配置

# 用户管理
class UserManageAdmin(object):
 list_display = ['id', 'name','addtime','get_UserManage_Taocan' ]
 search_fields = ['name']
 list_filter = ['phone',]
 ordering = ['-id']  # 进入xadmin页面将某个字段倒序排列
 readonly_fields = ['addtime']  # 只读字段,不能编辑
 # exclude = ['money']  # 不显示的字段
 list_editable = ['name', ]  # 即使编辑器
 relfield_style = 'level'  # 带有外键的字段变成搜索格式
 model_icon = 'fa fa-user'  # 表左边的图标
 is_execute = True  # 使用js插件

 # 禁止页面批量删除
 def has_delete_permission(self,*args,**kwargs):
 if args:
 return True
 return False

 # 自动添加管理员
 def save_models(self):
 self.new_obj.user = self.request.user
 super().save_models()

 # 设置用户只能查看自己填写的数据
 def queryset(self):
 qs = super(UserManageAdmin, self).queryset()
 if self.request.user.is_superuser:  # 超级用户可查看所有数据
 return qs
 else:
 que = qs.filter(user=self.request.user)
 return que

6、models.py

from django.db import models
from django.utils.safestring import mark_safe
from xadmin.plugins.auth import User
​
​
# 用户管理
class UserManage(models.Model):
 name = models.CharField(max_length=20, blank=True, null=True, verbose_name='用户名')
 phone = models.CharField(max_length=11, unique=True, verbose_name='手机号')
 money = models.DecimalField(max_digits=20, decimal_places=2,default=0, verbose_name='余额')
 addtime = models.DateTimeField(auto_now_add=True, verbose_name='注册时间')
 user = models.ForeignKey(User, on_delete=models.CASCADE, editable=False, null=True, verbose_name='管理员')
​
 # 显示时增加一列,比如显示用户办的卡
 def get_UserManage_Taocan(self):
 text = '增加一列</br>'
 # mark_safe允许换行
 return mark_safe(text)
​
 get_UserManage_Taocan.short_description = '用户套餐'
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容