filtering of select in sliverinline now working
authorScott Baker <smbaker@gmail.com>
Wed, 6 Aug 2014 01:33:31 +0000 (18:33 -0700)
committerScott Baker <smbaker@gmail.com>
Wed, 6 Aug 2014 01:33:31 +0000 (18:33 -0700)
planetstack/core/admin.py
planetstack/templates/admin/core/slice/change_form.html

index f8e6dac..86b2b3c 100644 (file)
@@ -234,6 +234,13 @@ class SliverInline(PlStackTabularInline):
     def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
         if db_field.name == 'deploymentNetwork':
            kwargs['queryset'] = Deployment.select_by_acl(request.user)
+           # the inscrutable jquery selector below says:
+           #     find the closest parent "tr" to the current element
+           #     then find the child with class "field-node"
+           #     then find the child with that is a select
+           #     then return its id
+           kwargs['widget'] = forms.Select(attrs={'onChange': "update_nodes(this, $($($(this).closest('tr')[0]).children('.field-node')[0]).children('select')[0].id);"})
+           #kwargs['widget'] = forms.Select(attrs={'onChange': "console.log($($($(this).closest('tr')[0]).children('.field-node')[0]).children('select')[0].id);"})
 
         field = super(SliverInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
 
index 035b730..c94b580 100644 (file)
@@ -7,6 +7,20 @@ deployment_nodes = [
    [{{ dn.0 }}, {{ dn.1 }} , "{{ dn.2 }}"],
 {% endfor %}
 ];
+
+function update_nodes(deployment_select, node_select_id) {
+    deployment_id = $(deployment_select).val();
+    html = "<option value=''>---------</option>\n";
+    for (i in deployment_nodes) {
+        dn = deployment_nodes[i];
+        if (dn[0] == deployment_id) {
+            html = html + '<option value="' + dn[1] + '">' + dn[2] + '</option>\n'
+        }
+    }
+    //console.log(html);
+    $("#"+node_select_id).empty().append(html);
+}
 </script>
+
 {% endblock %}