python从小白到白痴

xadmin开发后台管理系统

2018-11-09  本文已影响0人  lm_is_dc

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 = '用户套餐'
上一篇下一篇

猜你喜欢

热点阅读