@@ -288,8 +288,9 @@ class SelectField(BaseField):
288
288
<div><input type="checkbox" name="bar" value="3" id="bar|3"><label class="inline" for="bar|3">automatic</label></div>
289
289
<div><input type="checkbox" name="bar" value="4" id="bar|4" checked='checked'><label class="inline" for="bar|4">bazooty</label></div>
290
290
"""
291
- def __init__ ( self , name , multiple = None , display = None , refresh_on_change = False , refresh_on_change_values = None , size = None ):
291
+ def __init__ ( self , name , multiple = None , display = None , refresh_on_change = False , refresh_on_change_values = None , size = None , field_id = None ):
292
292
self .name = name
293
+ self .field_id = field_id
293
294
self .multiple = multiple or False
294
295
self .size = size
295
296
self .options = list ()
@@ -312,7 +313,11 @@ def __init__( self, name, multiple=None, display=None, refresh_on_change=False,
312
313
def add_option ( self , text , value , selected = False ):
313
314
self .options .append ( ( text , value , selected ) )
314
315
315
- def get_html ( self , prefix = "" , disabled = False ):
316
+ def get_html ( self , prefix = "" , disabled = False , extra_attr = None ):
317
+ if extra_attr is not None :
318
+ self .extra_attributes = ' %s' % ' ' .join ( [ '%s="%s"' % ( k , escape ( v ) ) for k , v in extra_attr .items () ] )
319
+ else :
320
+ self .extra_attributes = ''
316
321
if self .display == "checkboxes" :
317
322
return self .get_html_checkboxes ( prefix , disabled )
318
323
elif self .display == "radio" :
@@ -335,8 +340,8 @@ def get_html_checkboxes( self, prefix="", disabled=False ):
335
340
selected_text = ""
336
341
if selected :
337
342
selected_text = " checked='checked'"
338
- rval .append ( '<div%s><input type="checkbox" name="%s%s" value="%s" id="%s"%s%s><label class="inline" for="%s">%s</label></div>'
339
- % ( style , prefix , self .name , escaped_value , uniq_id , selected_text , self .get_disabled_str ( disabled ), uniq_id , escape ( text , quote = True ) ) )
343
+ rval .append ( '<div%s><input type="checkbox" name="%s%s" value="%s" id="%s"%s%s%s ><label class="inline" for="%s">%s</label></div>'
344
+ % ( style , prefix , self .name , escaped_value , uniq_id , selected_text , self .get_disabled_str ( disabled ), self . extra_attributes , uniq_id , escape ( text , quote = True ) ) )
340
345
ctr += 1
341
346
return unicodify ( "\n " .join ( rval ) )
342
347
@@ -352,7 +357,7 @@ def get_html_radio( self, prefix="", disabled=False ):
352
357
selected_text = ""
353
358
if selected :
354
359
selected_text = " checked='checked'"
355
- rval .append ( '<div%s><input type="radio" name="%s%s"%s value="%s" id="%s"%s%s><label class="inline" for="%s">%s</label></div>'
360
+ rval .append ( '<div%s><input type="radio" name="%s%s"%s value="%s" id="%s"%s%s%s ><label class="inline" for="%s">%s</label></div>'
356
361
% ( style ,
357
362
prefix ,
358
363
self .name ,
@@ -361,6 +366,7 @@ def get_html_radio( self, prefix="", disabled=False ):
361
366
uniq_id ,
362
367
selected_text ,
363
368
self .get_disabled_str ( disabled ),
369
+ self .extra_attributes ,
364
370
uniq_id ,
365
371
text ) )
366
372
ctr += 1
@@ -388,8 +394,12 @@ def get_html_default( self, prefix="", disabled=False ):
388
394
rval .append ( '<option value="%s"%s>%s</option>' % ( escape ( unicodify ( value ), quote = True ), selected_text , escape ( unicodify ( text ), quote = True ) ) )
389
395
if last_selected_value :
390
396
last_selected_value = ' last_selected_value="%s"' % escape ( unicodify ( last_selected_value ), quote = True )
391
- rval .insert ( 0 , '<select name="%s%s"%s%s%s%s%s>'
392
- % ( prefix , self .name , multiple , size , self .refresh_on_change_text , last_selected_value , self .get_disabled_str ( disabled ) ) )
397
+ if self .field_id is not None :
398
+ id_string = ' id="%s"' % self .field_id
399
+ else :
400
+ id_string = ''
401
+ rval .insert ( 0 , '<select name="%s%s"%s%s%s%s%s%s%s>'
402
+ % ( prefix , self .name , multiple , size , self .refresh_on_change_text , last_selected_value , self .get_disabled_str ( disabled ), id_string , self .extra_attributes ) )
393
403
rval .append ( '</select>' )
394
404
return unicodify ( "\n " .join ( rval ) )
395
405
0 commit comments