рдЙрдиреНрдирдд рд░реВрдк - рдСрдЯреЛ-рдкреВрд░реНрдг рдХреЗ рд╕рд╛рде рдмрд╣реБ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ

рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдпрд░рд▓рд╛рдЗрдиреЛрдВ рдФрд░ рд╕рд╕реНрддреА рдЙрдбрд╝рд╛рдиреЛрдВ рдХреЗ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рд╣рд░ рдХреЛрдИ рдЙрдирдХреА рджрд┐рд╢рд╛, рдкреНрд░рд╕реНрдерд╛рди рдФрд░ рдЖрдЧрдорди рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ - рд╣рдЬрд╛рд░реЛрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╕рд╛рде рдХрдИ рд╢рд╣рд░реЛрдВ, рджреЗрд╢реЛрдВ рдпрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдПрдХ рдХрд╛рд░реНрдп рдерд╛ - рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рджрд╕реНрдпрддрд╛ рддрдВрддреНрд░ рдХреИрд╕реЗ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ? рдорд▓реНрдЯреА рд╕рд┐рд▓реЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд▓рдВрдмреЗ рдкреНрд░рд╣рд╛рд░ рдХреЗ рдмрд┐рдирд╛, рдмрдЯрди "рдкреНрд░рд╕реНрдерд╛рди рдмрд┐рдВрджреБ рдЬреЛрдбрд╝реЗрдВ" рдХреЗ рдмрд┐рдирд╛ред рдЬрд╡рд╛рдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ -



рд╕рдорд╛рдзрд╛рди рдлреЗрд╕рдмреБрдХ рдФрд░ рд╕рдВрдкрд░реНрдХ рд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рдерд╛ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ 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 рдФрд░ рдЗрд╕рд▓рд┐рдП рджреЛ рдмрд╛рд░ рдЙрдардирд╛ рдирд╣реАрдВ рд╣реИ - рдЕрдЧрд░ рдЖрдкрдХреЛ рдмреАрдЯрд░реВрдЯ рдкрд╕рдВрдж рд╣реИ (рдпрд╛ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реА рдЦреЛрдЬ рдФрд░ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ) - рд╣рдо рдПрдХ рдХреБрд╢рд▓ рдЯрд╛рдЗрдкрд╕реЗрдЯрд░ рдФрд░ рдПрдХреНрд░реЛрдмреЗрдЯ рдЬреЗрдПрд╕рдП рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХрд░рдХреЗ рдЦреБрд╢ рд╣реЛрдВрдЧреЗред



All Articles