рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, Django рдореЗрдВ html рд░реВрдкреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╢рд╛рдорд┐рд▓ рд╣реИред рдПрдХ рдмрд╛рд░, Django рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдлреЙрд░реНрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ред рд╢рд╛рдпрдж, рддрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдмрд╣реБрдд рд╕реА рд╡рд╛рд╕реНрддреБ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдХрдард┐рдирд╛рдЗрдпрд╛рдВ рд╣реИрдВред рдпрд╣реА рдореИрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рддреЛ рдЪреБрдиреМрддреАред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдкрдиреЗ рдлреЛрди рдФрд░ рдЕрдиреНрдп рдирд┐рдЬреА рдЬрд╛рдирдХрд╛рд░реА рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдмрд╣реБрдд рд╢реМрдХ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЗ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: 8 (908) 1271669 рдпрд╛, рдХрд╣реЗрдВ, 908 127 16 69. рд╕рд╛рдЗрдЯ рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рд╕рд╣реА рдлреЛрди рджреЗрдЦрдиреЗ рдХреЗ рдмрд╣реБрдд рд╢реМрдХреАрди рд╣реИрдВ, рдЕрдзрд┐рдорд╛рдирддрдГ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕рдЬрд╛рдП рдЧрдП: (+4995) 722- 16-25, +7 968 тАЛтАЛ127-31-32ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВ, рдЕрд░реНрдерд╛рддреН рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬрд┐рд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдореИрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛, рдЙрд╕рдореЗрдВ рдЖрдк рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдлреЛрди рдирдВрдмрд░ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рднрдВрдбрд╛рд░рдг рдкреНрд░рд╛рд░реВрдк рдХреЛ рдПрдХ рд╕реНрдерд╛рди рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП 11 рдЕрдВрдХреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЖрдЧреЗ рдХреЗ рдХрдерди рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд░реВрдкреЛрдВ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдлреЙрд░реНрдо рдореЗрдВ рдлреЙрд░реНрдо рдХреНрд▓рд╛рд╕ (рдлрд╝реАрд▓реНрдб рдХреНрд▓рд╛рд╕) рдФрд░ рдлреЙрд░реНрдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЬрдм рдкреНрд░рдкрддреНрд░ рдкрд╣рд▓реА рдмрд╛рд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╢рдмреНрджрдХреЛрд╢ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЦреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рдиред рдЬрдм рдпрд╣ рдореЙрдбрд▓рдлрд╝реЙрд░реНрдо рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╢рдмреНрджрдХреЛрд╢ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдореЙрдбрд▓ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдлреЙрд░реНрдо рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдлреЙрд░реНрдо рд╡рд░реНрдЧ html рдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрд╛рдЙрдВрдбрдлрд┐рд▓реНрдб рдХреНрд▓рд╛рд╕ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдлрд╝реАрд▓реНрдб рдФрд░ рдкреНрд░рдкрддреНрд░ рдореЗрдВ рдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред Html рдХреЛрдб рд╕реНрд╡рдпрдВ рд╡рд┐рдЬреЗрдЯреНрд╕ (рд╡рд┐рдЬреЗрдЯ рд╡рд░реНрдЧ) рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХрд╛ рдлреЙрд░реНрдо рдЬрдорд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдбреЗрдЯрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдлреЙрд░реНрдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ - POST рдЕрдиреБрд░реЛрдз рдХреА рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рдкреНрд░рдкрддреНрд░ рдлрд╝реАрд▓реНрдб рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рднреА рдлрд╝реАрд▓реНрдб рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рднрд░реЗ рд╣реБрдП рд╣реИрдВред рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдлреЙрд░реНрдо рдлрд┐рд░ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╢рдмреНрджрдХреЛрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рд╢рдмреНрджрдХреЛрд╢ рдбреЗрдЯрд╛ рдХреЛ рдЦреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рдкрддреНрд░ рдХреЗ рдЕрдВрджрд░ рдбреЗрдЯрд╛ рдореЗрдВ рддреАрди рдорд╛рд░реНрдЧ рд╣реИрдВ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ (рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрдм рдлрд╛рд░реНрдо рдкрд╣рд▓реА рдмрд╛рд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛), рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рджрд░реНрдЬ рдбреЗрдЯрд╛ рдХрд╛ рдкреБрди: рдкреНрд░рджрд░реНрд╢рди) рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЖрд╡реЗрджрди (рдпрджрд┐ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рд╕рд╣реА рд╣реИ)ред рдареАрдХ рд╣реИ, рдХрд╛рд░реНрдп рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдФрд░ рддреАрд╕рд░реЗ рдорд╛рд░реНрдЧреЛрдВ рдореЗрдВ рдЬрд╛рдЧрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдлреЛрди рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдирд╛ред рдЪрд▓реЛ рдЖрдЦрд┐рд░реА рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдкрд╣рд▓реЗ, рд╣рдо рднрд╡рд┐рд╖реНрдп рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдмрдирд╛рдПрдВрдЧреЗред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдЪрд╛рд░рдлрд┐рд▓реНрдб рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реЛрдЧрд╛ред
class MultiplePhoneFormField(forms.CharField):
рдкреНрд░рд▓реЗрдЦрди рд╕рддреНрдпрд╛рдкрди рдХреЗ рджреМрд░рд╛рди рдореВрд▓реНрдп рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП to_python () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░рд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЕрдЧрд▓рд╛, рдорд╛рдиреНрдп () рдФрд░ run_validators () рд╡рд┐рдзрд┐рдпрд╛рдБред рд╡реЗ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдП рдЧрдП рдореВрд▓реНрдп рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЗрд╕реЗ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рднреА рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВред рдХреНрд╖реЗрддреНрд░ рдХреА рд╕реНрд╡рдЪреНрдЫ () рд╡рд┐рдзрд┐ рдХреНрдпрд╛ рд╣реИред рдЖрдзрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рдХрд╣рддрд╛ рд╣реИ рдФрд░ рдЕрдВрддрд┐рдо рдореВрд▓реНрдп рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣рд╛рдВ рд╣рдо рдХреЛрдб рдбрд╛рд▓реЗрдВрдЧреЗред
def clean(self, phones): phones = super(MultiplePhoneFormField, self).clean(phones) cleaned_phones = [] for phone in phones.split(','): phone = re.sub(r'[\s +.()\-]', '', phone) if not phone: continue if not phone.isdigit(): raise ValidationError(u' .') if len(phone) == 11: pass elif len(phone) == 10: phone = '7' + phone elif len(self.phone_code + phone) == 11: phone = self.phone_code + phone else: raise ValidationError(u' .') cleaned_phones.append(phone) return ' '.join(cleaned_phones)
рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╕рдВрдЦреНрдпрд╛ рдХреИрд╕реЗ рдорд╛рдиреНрдп рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред
рдЕрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рд╕реЗ рдорд╛рд░реНрдЧред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ MultiEmailField рдлрд╝реАрд▓реНрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдИрдореЗрд▓ рдкрддреЗ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рд╕реВрдЪреА рдХреИрд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдп рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрдВрдзреЛрдВ рдкрд░ рдЯрд┐рдХреА рд╣реБрдИ рд╣реИ рдЬреЛ рдлреЙрд░реНрдо рдмрдирд╛рддрд╛ рд╣реИред рдХреЛрдИ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рднреА рдирд╣реАрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЧрд░реНрд╡ рдирд╣реАрдВ рд╣реИ, рд╣рдо рд╕реНрд░реЛрдд рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдмрд╛рдЙрдВрдбрдлрд┐рд▓реНрдб рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрдХ as_widget () рд╡рд┐рдзрд┐ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдХрд╛ рдорд╛рди рдЙрд╕рдХреЗ рдорд╛рди () рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рдХрд░ рдкрд╛рд╕ рдХрд░рддреА рд╣реИред рдпрд╣ рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреНрдпрд╛ рд╣реИ - рдбреЗрдЯрд╛ рдпрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХред рдФрд░ рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдирд┐рд░рд╛рд╢рд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ: рдпрджрд┐ рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдлрд╝реАрд▓реНрдб рдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХреАрдХреГрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдорд╛рди () рд╡рд┐рдзрд┐ рдмрд╕ self.form.initial.get (self.name) рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИ рдФрд░ рдлрд┐рд░, рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдЙрдиреНрд╣реЗрдВ рдлрд╝реАрд▓реНрдб рдХреА рддреИрдпрд╛рд░реА_рд╡реЗрд▓реНрдпреВ () рдкрджреНрдзрддрд┐ рдореЗрдВ рднреЗрдЬрддреА рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕рднреА рдорд╛рди рдПрдХ рд╣реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдЕрдВрдд рдореЗрдВ "рд╕рд╣реА" рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╛ рддреЛ рдореБрдЭреЗ рдХреБрдЫ рд╕рдордЭ рдирд╣реАрдВ рдЖрдпрд╛, рдпрд╛ Djangov рдлреЙрд░реНрдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ рддрд╛рдХрд┐ рдХреЗрд╡рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реА рдлреЙрд░реНрдо рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХреЗред рдлреЙрд░реНрдо рдмрдирд╛рддреЗ рд╕рдордп рд╢реБрд░реБрдЖрддреА рдбрд┐рдХреНрд╢рдирд░реА рдореЗрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА html рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
"рд▓реЗрдХрд┐рди рд░реБрдХрд┐рдП, рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдбреЗрдЯрд╛рдЗрдордлрд┐рд▓реНрдб, рдЬреЛ рд╢рд╛рдВрддрд┐ рд╕реЗ рдбреЗрдЯрдЯрд╛рдЗрдо рдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ?" рдЖрдк рдХрд╣рддреЗ рд╣реИрдВред рддреЛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдХреИрд╕реЗред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдЕрдЬреНрдЮрд╛рдд рд╕реНрд░реЛрдд рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп, DateTimeInput рд╡рд┐рдЬреЗрдЯ рдХреЗ рд░реЗрдВрдбрд░ () рд╡рд┐рдзрд┐ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ _format_value () рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣ рд╡рд┐рдзрд┐, рдЕрдЧрд░ рдпрд╣ рдкрд╛рддрд╛ рд╣реИ рдХрд┐ рдорд╛рди рдбреЗрдЯрд╛рдЗрдо рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА рдРрд╕рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдЖрд╡реЗрджрди рд╕реЗ рдкрд╛рд░рд┐рдд рдореВрд▓реНрдп рдХрд╛ рдкреНрд░рдХрд╛рд░ рдФрд░ рдлреЙрд░реНрдо рдЬрдорд╛ рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред
рдлрд┐рд░ рднреА, рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╣реИред рдпрджрд┐ рдЖрдк рдмрд╛рдЙрдВрдбрдлрд┐рд▓реНрдб.рд╡реЗрд▓реНрдпреВ () рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдЙрдВрдб_рдбрд╛рдЯрд╛ () рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рддреИрдпрд╛рд░_рд╡рд╛рдпреБ () рд╡рд┐рдзрд┐ рдореЗрдВ, рдЬрд╣рд╛рдВ рдореВрд▓реНрдп рдХреЗ рдмрд╛рдж рдЧрд┐рд░рддрд╛ рд╣реИ, рдЖрдк рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рдХрд╣рд╛рдВ рд╕реЗ рдЖрдпрд╛ рд╣реИред рддреЛ рдЪрд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред
class ValueFromDatadict(unicode): pass class MultiplePhoneFormField(forms.CharField):
рд╣реБрд░реНрд░реЗ! рдЕрдм рдлрд╝реЛрди рдкрд╣рд▓реА рдмрд╛рд░ рдлреЙрд░реНрдо рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдлреЙрд░реНрдореЗрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдкрд╛рджрд┐рдд рдбреЗрдЯрд╛ рдЖрдиреЗ рдкрд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕рд▓рд┐рдП рдЖрдк рдлреЛрди рдХреЛ рдлреЙрд░реНрдореЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
def format_phones(phones, code=None): for phone in filter(None, phones.split(' ')): if len(phone) != 11:
рдпрд╣ рдХреЗрд╡рд▓ рдлреЙрд░реНрдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╢рд╣рд░ рдХреЛрдб рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рд╡рд╕реНрддреБ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИред
class RestaurantForm(forms.ModelForm): phone = MultiplePhoneFormField(label=u'', required=False, help_text=u' .') def __init__(self, *args, **kwargs): super(RestaurantForm, self).__init__(*args, **kwargs) if self.instance: self.fields['phone'].phone_code = self.instance.city.phone_code
рдЦреИрд░, рд╕рд╛рдЗрдЯ рдкрд░ рдлреЛрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдлрд┐рд▓реНрдЯрд░ рдЙрдкрдпреБрдХреНрдд рд╣реИ:
@register.filter def format_phones_with_code(phones, code): return mark_safe(u', '.join([u'<nobr>%s</nobr>' % phone for phone in format_phones(phones, code)]))
рдмреЗрд╢рдХ, рд╣рдо рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░реНрдп рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмреИрд╕рд╛рдЦреА рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВред рдпрд╣реА Django рдХреЗ рд╕рд╛рде рдмрдВрдбрд▓ рдХрд┐рдП рдЧрдП рдлрд╝реАрд▓реНрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реА DateTimeField рдлрд╝реАрд▓реНрдб рдХреЗ to_python () рд╡рд┐рдзрд┐ рдореЗрдВ, рдПрдХ рдЬрд╛рдБрдЪ рд╣реИ рдХрд┐ рдорд╛рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдЯрд╛рдЯрд╛рдЗрдо рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, to_python () рд╡рд┐рдзрд┐ рдХреЛ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рд╢рдмреНрджрдХреЛрд╢ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреЗрдЯрд╛ рд╢рдмреНрджрдХреЛрд╢ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рддрд╛ рд╣реИ: "рдпреЗ рдЖрдорддреМрд░ рдкрд░ рддрд╛рд░ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рддрд╛рд░ рд╣реЛред" рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдПрдХ рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдз рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдФрд░ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЪреАрд▓рд╛рдкрди рдЕрдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЛ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдорд┐рдХ рдХрд╛рд░реНрдп рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЕрдиреБрдорд╛рдиреА рдмрдирд╛рддрд╛ рд╣реИред