zoukankan      html  css  js  c++  java
  • Django Admin管理后台详解17(转)表单二级联动

    思路

    通过自定义插件引入自己的 js 文件,在js文件中请求数据,修改表单值

    1. 自定义插件:

    admin.py

    复制代码
    class ProductPlugin(BaseAdminPlugin):
        def init_request(self, *args, **kwargs):
            path = self.request.get_full_path()
            # 只在添加或修改时启动插件
            if 'products/add' in path or 'products/update' in path:
                return True
            return False
    
        def get_media(self, media):
            # 引入自定义的js文件,列表中可以添加多个资源文件,一般是js和css
            media._js_lists.append(['/static/product/admin.js'])
            
            return media
    
    
    # 注册插件
    site.register_plugin(ProductPlugin, CreateAdminView)
    site.register_plugin(ProductPlugin, UpdateAdminView)
    复制代码

    2. views.py中定义获取产品属性的接口

    复制代码
    def ProductAttrsList(request, cid):
        if not cid:
            return JsonResponse([])
        attrs = ProductAttr.objects.filter(category_id=cid).values()
        print(attrs)
        return JsonResponse(list(attrs), safe=False)
    复制代码

    3. urls.py中添加路由

    urlpatterns = [
        path('attrs/<int:cid>/', ProductAttrsList, name='attrslist'),
    ]

    4. js 文件 /static/products/admin.js

    复制代码
    $('#id_category').change(function(){
            var cid = $(this).val();
            console.log('/products/attrs/' + cid + '/');
            $.get('/products/attrs/' + cid + '/', function(res){
                console.log(res);
                var html = '';
                res.forEach(function(item, index){
                    html += '<option value="'+ item.id +'">'+ item.name +'</option>'
                })
                
                $('#id_product_attr_form').html(html);
            })
        })
    复制代码

    5. 运行看效果

     

  • 相关阅读:
    vim跳转(一)
    代理服务器
    python类
    python 删除/查找重复项
    DNS缓存
    DNS查询过程
    http返回头中content-length与Transfer-Encoding: chunked的问题释疑
    jquery mouseover与mouseenter,mouserout与mouseleave的区别
    php提示Call-time pass-by-reference has been deprecated in的解决方法
    uboot启动内核(3)
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/15597292.html
Copyright © 2011-2022 走看看