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

 

原文地址:https://www.cnblogs.com/wangbin2188/p/15597292.html