This is an extension of ochiba77's slice here. The issue I had is that the data that contained the fields for the slice were available to me via a web service call, not in a database. I modified his code as follows. The view feels a little hacky... but I've never done any web development, and it works, so it's good enough for a prototype.
Here's the controller... I had a main category of two segments... when one of those is chosen, I needed to get the materials corresponding to the chosen segment via a web service call. getMats is the function for that.
def shouldcost4():
segments = ['Castings', 'Forgings'] #category = segment
if request.vars.segment_name:
materials = getMats(segments[int(request.vars.segment_name)])
else:
materials = getMats(segments[0])
if request.vars.material_name: #maker == material
ret_string = request.vars.segment_name + ' | ' + request.vars.material_name
else:
ret_string = 'a'
return dict(segments=segments, materials=materials, ret_string=ret_string)
Here's my A_Widgets.py file with the getMats function...
import uuid
import datetime
from httplib2 import Http
from urllib import urlencode
import json
import json, urllib2
def getMats(segment):
u = urllib2.urlopen('URL_GOES_HERE?Segment='+segment)
j = json.load(u)['results']
mats = [str(j[a]['MATERIALSPEC']) for a in range(len(j))]
return(mats)
And my view...
{{extend 'layout.html'}}
{{segments=segments}}
{{materials=materials}}
<form enctype="multipart/form-data" action="{{URL()}}" method="post">
<label for="part_number">Part Number:</label>
<input type="text" name="part_number" value={{=request.vars.part_number}}><div />
<label for="segment_name">Segment Name:</label>
<select name='segment_name'
onchange="jQuery(material_name).remove();jQuery(matlabel).remove();
ajax('material', ['segment_name'], 'shadow_clone');">
{{for i in range(len(segments)):}}
<option value="{{=i}}"
{{=" selected='selected'" if str(i)==request.vars.segment_name else ""}}>
{{=segments[i]}}
</option>
{{pass}}
</select> <div />
<span id='shadow_clone'></span>
<label id="matlabel" for="material_name">Material:</label>
<select name='material_name' >
{{for i in range(len(materials)):}}
<option value="{{=i}}"
{{=XML(" selected='selected'") if str(i)==request.vars.material_name else ""}}>
{{=materials[i]}}</option>
{{pass}}
</select><div />
<label for="EAU">Estimated Annual Usage:</label>
<input type="text" name="EAU" value={{=request.vars.EAU}}><div />
<input type="submit">
</form>
<div />
And here's what it looks like...

That's it.
cn



Comments (0)