• 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. 运行看效果

     

  • 相关阅读:
    本机mysql 5.7服务启动后停止,某些服务在未有其他应用程序使用时停止
    java数据结构 • 面向对象 • 异常 • 随机数·时间
    获取对象信息
    集合的运算律
    常用的逻辑符号
    未解决问题
    继承和多态
    访问权限
    类和实例
    第三方模块安装
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/15597292.html
Copyright © 2020-2023  润新知