рд╕рдорд╛рдзрд╛рди рдлреЗрд╕рдмреБрдХ рдФрд░ рд╕рдВрдкрд░реНрдХ рд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рдерд╛ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ django рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдкрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред
рдпрд╣ рдирд┐рдпрдВрддреНрд░рдг рдХрдИ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдПрдХ рдмрдбрд╝реА рд╕реВрдЪреА рд╕реЗ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рд╕реИрдХрдбрд╝реЛрдВ рдпрд╛ рд╣рдЬрд╛рд░реЛрдВ рддрддреНрд╡ред
рдПрдХ рдЬреАрд╡рдВрдд рдЙрджрд╛рд╣рд░рдг рдПрдпрд░рд▓рд╛рдЗрди рд╢реЗрдпрд░реЛрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╣рд░реЛрдВ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ ред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдУрд░ рд╕реЗ, рд╣рдо www.emposha.com/javascript/fcbkcomplete.html рдкрд░ рдЙрдкрд▓рдмреНрдз рд░реЗрдбреАрдореЗрдб рдЬреЗрдХрд░реА рдкреНрд▓рдЧ-рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореАрдбрд┐рдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореАрдбрд┐рдпрд╛ / рд╕реАрдПрд╕рдПрд╕ рдФрд░ рдореАрдбрд┐рдпрд╛ / рдЬреЗрдПрд╕) рдореЗрдВ рд╕реАрдПрд╕рдПрд╕ рдФрд░ рдЬреЗрдПрд╕ рдбрд╛рд▓рддреЗ рд╣реИрдВред
рдкреНрд░рдкрддреНрд░ рдХреЛрдб рдХреЛ foms.py рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ-
class MultiOriginSelect (forms . SelectMultiple):
class Media :
css = {
'all' : ( '/media/css/fcbkinput.css' ,)
}
js = ( '/media/js/jquery.fcbkcomplete.js' )
class SubscriptionFilterForm (forms . Form):
CHOICES = []
........
orgs = forms . MultipleChoiceField(widget = MultiOriginSelect, choices = CHOICES, required = False , initial = [])
dsts = forms . MultipleChoiceField(widget = MultiOriginSelect, choices = CHOICES, required = False , initial = [])
........
def __init__ ( self , * args, ** kwargs):
super (SubscriptionFilterForm, self ) . __init__( * args, ** kwargs)
fcbkcomplete_fields = [ u'orgs' , u'dsts' ]
for field in fcbkcomplete_fields:
# check whether we have init parameters
if args:
loc_list = args[ 0 ] . getlist(field)
.....
# generate dynamic choices for fcbk fields from args, like [id, name]
self . fields[field] . choices = ([( int (o), name(o)) for o in loc_list] )
рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдореБрдЦреНрдп рдПрдХ рд╣реИ, рдпрджрд┐ рдлреЙрд░реНрдо рдореЗрдВ рдЖрд░рдВрднреАрдХрд░рдг рдорд╛рди рд╣реИрдВ, рддреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рднрд░реЗрдВред
рдлрд╝реЙрд░реНрдо рдХреЗ рд╕рд╛рде HTML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЗ рдЖрд░рдВрдн рдХреЛ рдЬреЛрдбрд╝реЗрдВ:
<head>
<script>
$( document ).ready( function (){
$( "#id_orgs, #id_dsts" ).fcbkcomplete({
json_url : '/subscribe_autocomplete' ,
first_selected : false ,
filter_hide : true ,
filter_case : false ,
complete_text : "Enter country, city or airport." ,
maxitems : 100
});
});
</script>
</head>
<body>
....
<form>
......
{{form.orgs}}
{{form.dsts}}
<input type = "submit" >
</form>
......
</body>
рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдд: рдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдРрд╕рд╛ рджреГрд╢реНрдп рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдЬрдВрдХреНрд╕рди рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ - / subscribe_autocomplete рдкрд░ рд╕реНрдерд┐рдд рд╣реИред рддреЛ рдЬреЛрдбрд╝реЛ - to urls.py:
.....
url(r'^subscribe_autocomplete', subscribe_autocomplete, name='subscribe_autocomplete'),
.....
рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ:
def subscribe_autocomplete (request):
q = request . GET . get( 'tag' , '' )
# skip too short requests
if len (q) <3 : return HttpResponse( '' )
# filter any instances according to tag
qr = Objects . objects . filter(Q( .... ))
#generate json
#message format - [{"caption":"London", "value":4}]
s =[...];
return HttpResponse(s)
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреЗрдЬ рдкрд░ рдПрдХ рдлреЙрд░реНрдо рд╣реИ рдФрд░ рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдз (рдлрд╝реЙрд░реНрдо = SubscriptionFilterForm (request.POST)) рд╕реЗ рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ
рдПрдХ рдореЙрдбрд▓ рд╕реЗ рдПрдХ рдлреЙрд░реНрдо рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдореИрдВ рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, ModelForm рдлрд┐рдЯ рдирд╣реАрдВ рд╣реБрдЖ)
def subs_form_from_model (s):
src_d = {}
src_d[ 'subscriptionemail' ] = s . email
,,,,
qd = django . http . QueryDict( '' )
qd = qd . copy() # to make muttable
qd . update(src_d)
# fill form fields
qd . setlist( 'orgs' , [ unicode (o . id) for o in s . orgs . all()])
qd . setlist( 'dsts' , [ unicode (d . id) for d in s . dsts . all()])
# create form
form = SubscriptionFilterForm(qd)
..........
return form </ code >
рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рднрд░реЗ рд╣реБрдП рдХреНрд╖реЗрддреНрд░ (рдЬрд┐рдпреЛ рдЖрдИрдкреА рджреНрд╡рд╛рд░рд╛) рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реИред
рдмрдбрд╝реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдПрдХ рд╣реА рдлреЙрд░реНрдо (рдФрд░ рдЪрд╛рд╣рд┐рдП) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
PS рдФрд░ рдЗрд╕рд▓рд┐рдП рджреЛ рдмрд╛рд░ рдЙрдардирд╛ рдирд╣реАрдВ рд╣реИ - рдЕрдЧрд░ рдЖрдкрдХреЛ рдмреАрдЯрд░реВрдЯ рдкрд╕рдВрдж рд╣реИ (рдпрд╛ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реА рдЦреЛрдЬ рдФрд░ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ) - рд╣рдо рдПрдХ рдХреБрд╢рд▓ рдЯрд╛рдЗрдкрд╕реЗрдЯрд░ рдФрд░ рдПрдХреНрд░реЛрдмреЗрдЯ рдЬреЗрдПрд╕рдП рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХрд░рдХреЗ рдЦреБрд╢ рд╣реЛрдВрдЧреЗред