给xadmin后台list页面添加自定义控件

我和xadmin后台自定义的爱恨纠葛之自定义控件添加,需求是给xadmin后台的list页面添加一个筛选框,可以选择不同的类目,只返回属于该类目的数据

最终效果

在这里插入图片描述

准备控件用到的html

找个用到search_fields字段的页面
在这里插入图片描述
将搜索框的HTML直接复制下来

<form class="navbar-form navbar-left" action="" method="get">
    <div class="input-group search-group">
    <input id="searchbar" class="form-control" type="text" name="_q_" value="" placeholder="搜索 公司信息">
    <span class="input-group-btn">
    	<button class="btn btn-primary" type="submit">
    	<i class="fa fa-search"></i>
    	</button>
    </span>
    </div>
</form>

转变成我们自己的html,相关的name、id可以自定义,我把原来的搜索按钮隐藏了,目的是想实现在点击筛选项时调用提交按钮

{% load i18n %}
<form class="navbar-form navbar-left" action="" method="get">
    <div class="input-group search-group">
    <select name="search_field" class="select form-control" id="search_field" onchange="submitselect()">
        <option value="">请选择筛选项</option>
        <option value="0">全部</option>
    </select>
        # 注意我这里把原来的搜索按钮隐藏了
        <button class="btn btn-primary" type="submit" id="btn" style="display: none"></button>
    </div>
</form>

给下拉框添加动态数据,写相关的js

<script>
    # 页面加载时访问自己写的接口获取筛选项
    $(document).ready(function () {
            $.getJSON('接口',function (data) {
                if(data.status==0){
                    var btnobj = data.data['xxx'];
                    for(var i=0;i<btnobj .length;i++){
                        $('#search_field').append("<option value='"+btnobj[i].id+"'>"+btnobj[i].name+"</option>")
                    }
                }
            })
    });

   # 点击下拉框中的筛选项时触发提交按钮
    function submitselect() {
        $('#btn').click()
    }
</script>
将写好的控件添加到adminx文件中

将下面代码加入adminx文件,后续在需要自定义控件的类中将isExcute置为True就可以开启控件了

from django.template.context import RequestContext
from xadmin.views import BaseAdminPlugin, ListAdminView
from django.template import loader
def get_context_dict(context):
    if isinstance(context, RequestContext):
        ctx = context.flatten()
    else:
        ctx = context
    return ctx

class CustomizePlugin(BaseAdminPlugin):
    isExcute = False 
    def init_request(self, *args, **kwargs):
        return bool(self.isExcute)

    def block_nav_form(self, context, nodes):
        nodes.append(loader.render_to_string('控件.html', get_context_dict(context)))

xadmin.site.register_plugin(CustomizePlugin, ListAdminView)

在需要控件的类中开启isExcute,重写查询方法

class ModelAdmin(object):
    list_display = []
    isExcute = True

    def queryset(self):
        qs = Model.objects.all()
        # 根据选择的筛选项查询属于该类目的数据,如果没传入类目则返回所有数据
        search_field = int(self.request.GET.get('search_field',0))
        if search_field:
            qs = qs.filter(id=search_field)
        return qs

OK!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值