consider select and textarea fields in forms
This commit is contained in:
parent
23d5127454
commit
fe4dbf8698
1 changed files with 13 additions and 5 deletions
|
|
@ -348,16 +348,25 @@ class Form(OrderedDict):
|
||||||
self.method = el.attrib.get('method', 'GET')
|
self.method = el.attrib.get('method', 'GET')
|
||||||
self.url = el.attrib.get('action', page.url)
|
self.url = el.attrib.get('action', page.url)
|
||||||
|
|
||||||
for el in el.xpath('.//input'):
|
for inp in el.xpath('.//input | .//select | .//textarea'):
|
||||||
try:
|
try:
|
||||||
name = el.attrib['name']
|
name = inp.attrib['name']
|
||||||
except KeyError:
|
except KeyError:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if el.attrib['type'] == 'checkbox' and not 'checked' in el:
|
if inp.attrib['type'] in ('checkbox', 'radio') and not 'checked' in inp:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
value = el.attrib.get('value', u'')
|
if inp.tag == 'select':
|
||||||
|
options = inp.xpath('.//option[@selected]')
|
||||||
|
if len(options) == 0:
|
||||||
|
options = inp.xpath('.//option')
|
||||||
|
if len(options) == 0:
|
||||||
|
value = u''
|
||||||
|
else:
|
||||||
|
value = options[0].attrib.get('value', options[0].text or u'')
|
||||||
|
else:
|
||||||
|
value = inp.attrib.get('value', inp.text or u'')
|
||||||
self[name] = value
|
self[name] = value
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
@ -459,7 +468,6 @@ class ListElement(AbstractElement):
|
||||||
self.objects = {}
|
self.objects = {}
|
||||||
|
|
||||||
def __call__(self, *args, **kwargs):
|
def __call__(self, *args, **kwargs):
|
||||||
|
|
||||||
for key, value in kwargs.iteritems():
|
for key, value in kwargs.iteritems():
|
||||||
self.env[key] = value
|
self.env[key] = value
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue