| 1 | | # -*- coding: utf-8 -*- |
|---|
| 2 | | # Tests for the different contrib/localflavor/ form fields. |
|---|
| 3 | | |
|---|
| 4 | | localflavor_tests = r""" |
|---|
| 5 | | # USZipCodeField ############################################################## |
|---|
| 6 | | |
|---|
| 7 | | USZipCodeField validates that the data is either a five-digit U.S. zip code or |
|---|
| 8 | | a zip+4. |
|---|
| 9 | | >>> from django.contrib.localflavor.us.forms import USZipCodeField |
|---|
| 10 | | >>> f = USZipCodeField() |
|---|
| 11 | | >>> f.clean('60606') |
|---|
| 12 | | u'60606' |
|---|
| 13 | | >>> f.clean(60606) |
|---|
| 14 | | u'60606' |
|---|
| 15 | | >>> f.clean('04000') |
|---|
| 16 | | u'04000' |
|---|
| 17 | | >>> f.clean('4000') |
|---|
| 18 | | Traceback (most recent call last): |
|---|
| 19 | | ... |
|---|
| 20 | | ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] |
|---|
| 21 | | >>> f.clean('60606-1234') |
|---|
| 22 | | u'60606-1234' |
|---|
| 23 | | >>> f.clean('6060-1234') |
|---|
| 24 | | Traceback (most recent call last): |
|---|
| 25 | | ... |
|---|
| 26 | | ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] |
|---|
| 27 | | >>> f.clean('60606-') |
|---|
| 28 | | Traceback (most recent call last): |
|---|
| 29 | | ... |
|---|
| 30 | | ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] |
|---|
| 31 | | >>> f.clean(None) |
|---|
| 32 | | Traceback (most recent call last): |
|---|
| 33 | | ... |
|---|
| 34 | | ValidationError: [u'This field is required.'] |
|---|
| 35 | | >>> f.clean('') |
|---|
| 36 | | Traceback (most recent call last): |
|---|
| 37 | | ... |
|---|
| 38 | | ValidationError: [u'This field is required.'] |
|---|
| 39 | | |
|---|
| 40 | | >>> f = USZipCodeField(required=False) |
|---|
| 41 | | >>> f.clean('60606') |
|---|
| 42 | | u'60606' |
|---|
| 43 | | >>> f.clean(60606) |
|---|
| 44 | | u'60606' |
|---|
| 45 | | >>> f.clean('04000') |
|---|
| 46 | | u'04000' |
|---|
| 47 | | >>> f.clean('4000') |
|---|
| 48 | | Traceback (most recent call last): |
|---|
| 49 | | ... |
|---|
| 50 | | ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] |
|---|
| 51 | | >>> f.clean('60606-1234') |
|---|
| 52 | | u'60606-1234' |
|---|
| 53 | | >>> f.clean('6060-1234') |
|---|
| 54 | | Traceback (most recent call last): |
|---|
| 55 | | ... |
|---|
| 56 | | ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] |
|---|
| 57 | | >>> f.clean('60606-') |
|---|
| 58 | | Traceback (most recent call last): |
|---|
| 59 | | ... |
|---|
| 60 | | ValidationError: [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.'] |
|---|
| 61 | | >>> f.clean(None) |
|---|
| 62 | | u'' |
|---|
| 63 | | >>> f.clean('') |
|---|
| 64 | | u'' |
|---|
| 65 | | |
|---|
| 66 | | # USPhoneNumberField ########################################################## |
|---|
| 67 | | |
|---|
| 68 | | USPhoneNumberField validates that the data is a valid U.S. phone number, |
|---|
| 69 | | including the area code. It's normalized to XXX-XXX-XXXX format. |
|---|
| 70 | | >>> from django.contrib.localflavor.us.forms import USPhoneNumberField |
|---|
| 71 | | >>> f = USPhoneNumberField() |
|---|
| 72 | | >>> f.clean('312-555-1212') |
|---|
| 73 | | u'312-555-1212' |
|---|
| 74 | | >>> f.clean('3125551212') |
|---|
| 75 | | u'312-555-1212' |
|---|
| 76 | | >>> f.clean('312 555-1212') |
|---|
| 77 | | u'312-555-1212' |
|---|
| 78 | | >>> f.clean('(312) 555-1212') |
|---|
| 79 | | u'312-555-1212' |
|---|
| 80 | | >>> f.clean('312 555 1212') |
|---|
| 81 | | u'312-555-1212' |
|---|
| 82 | | >>> f.clean('312.555.1212') |
|---|
| 83 | | u'312-555-1212' |
|---|
| 84 | | >>> f.clean('312.555-1212') |
|---|
| 85 | | u'312-555-1212' |
|---|
| 86 | | >>> f.clean(' (312) 555.1212 ') |
|---|
| 87 | | u'312-555-1212' |
|---|
| 88 | | >>> f.clean('555-1212') |
|---|
| 89 | | Traceback (most recent call last): |
|---|
| 90 | | ... |
|---|
| 91 | | ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] |
|---|
| 92 | | >>> f.clean('312-55-1212') |
|---|
| 93 | | Traceback (most recent call last): |
|---|
| 94 | | ... |
|---|
| 95 | | ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] |
|---|
| 96 | | >>> f.clean(None) |
|---|
| 97 | | Traceback (most recent call last): |
|---|
| 98 | | ... |
|---|
| 99 | | ValidationError: [u'This field is required.'] |
|---|
| 100 | | >>> f.clean('') |
|---|
| 101 | | Traceback (most recent call last): |
|---|
| 102 | | ... |
|---|
| 103 | | ValidationError: [u'This field is required.'] |
|---|
| 104 | | |
|---|
| 105 | | >>> f = USPhoneNumberField(required=False) |
|---|
| 106 | | >>> f.clean('312-555-1212') |
|---|
| 107 | | u'312-555-1212' |
|---|
| 108 | | >>> f.clean('3125551212') |
|---|
| 109 | | u'312-555-1212' |
|---|
| 110 | | >>> f.clean('312 555-1212') |
|---|
| 111 | | u'312-555-1212' |
|---|
| 112 | | >>> f.clean('(312) 555-1212') |
|---|
| 113 | | u'312-555-1212' |
|---|
| 114 | | >>> f.clean('312 555 1212') |
|---|
| 115 | | u'312-555-1212' |
|---|
| 116 | | >>> f.clean('312.555.1212') |
|---|
| 117 | | u'312-555-1212' |
|---|
| 118 | | >>> f.clean('312.555-1212') |
|---|
| 119 | | u'312-555-1212' |
|---|
| 120 | | >>> f.clean(' (312) 555.1212 ') |
|---|
| 121 | | u'312-555-1212' |
|---|
| 122 | | >>> f.clean('555-1212') |
|---|
| 123 | | Traceback (most recent call last): |
|---|
| 124 | | ... |
|---|
| 125 | | ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] |
|---|
| 126 | | >>> f.clean('312-55-1212') |
|---|
| 127 | | Traceback (most recent call last): |
|---|
| 128 | | ... |
|---|
| 129 | | ValidationError: [u'Phone numbers must be in XXX-XXX-XXXX format.'] |
|---|
| 130 | | >>> f.clean(None) |
|---|
| 131 | | u'' |
|---|
| 132 | | >>> f.clean('') |
|---|
| 133 | | u'' |
|---|
| 134 | | |
|---|
| 135 | | # USStateField ################################################################ |
|---|
| 136 | | |
|---|
| 137 | | USStateField validates that the data is either an abbreviation or name of a |
|---|
| 138 | | U.S. state. |
|---|
| 139 | | >>> from django.contrib.localflavor.us.forms import USStateField |
|---|
| 140 | | >>> f = USStateField() |
|---|
| 141 | | >>> f.clean('il') |
|---|
| 142 | | u'IL' |
|---|
| 143 | | >>> f.clean('IL') |
|---|
| 144 | | u'IL' |
|---|
| 145 | | >>> f.clean('illinois') |
|---|
| 146 | | u'IL' |
|---|
| 147 | | >>> f.clean(' illinois ') |
|---|
| 148 | | u'IL' |
|---|
| 149 | | >>> f.clean(60606) |
|---|
| 150 | | Traceback (most recent call last): |
|---|
| 151 | | ... |
|---|
| 152 | | ValidationError: [u'Enter a U.S. state or territory.'] |
|---|
| 153 | | >>> f.clean(None) |
|---|
| 154 | | Traceback (most recent call last): |
|---|
| 155 | | ... |
|---|
| 156 | | ValidationError: [u'This field is required.'] |
|---|
| 157 | | >>> f.clean('') |
|---|
| 158 | | Traceback (most recent call last): |
|---|
| 159 | | ... |
|---|
| 160 | | ValidationError: [u'This field is required.'] |
|---|
| 161 | | |
|---|
| 162 | | >>> f = USStateField(required=False) |
|---|
| 163 | | >>> f.clean('il') |
|---|
| 164 | | u'IL' |
|---|
| 165 | | >>> f.clean('IL') |
|---|
| 166 | | u'IL' |
|---|
| 167 | | >>> f.clean('illinois') |
|---|
| 168 | | u'IL' |
|---|
| 169 | | >>> f.clean(' illinois ') |
|---|
| 170 | | u'IL' |
|---|
| 171 | | >>> f.clean(60606) |
|---|
| 172 | | Traceback (most recent call last): |
|---|
| 173 | | ... |
|---|
| 174 | | ValidationError: [u'Enter a U.S. state or territory.'] |
|---|
| 175 | | >>> f.clean(None) |
|---|
| 176 | | u'' |
|---|
| 177 | | >>> f.clean('') |
|---|
| 178 | | u'' |
|---|
| 179 | | |
|---|
| 180 | | # USStateSelect ############################################################### |
|---|
| 181 | | |
|---|
| 182 | | USStateSelect is a Select widget that uses a list of U.S. states/territories |
|---|
| 183 | | as its choices. |
|---|
| 184 | | >>> from django.contrib.localflavor.us.forms import USStateSelect |
|---|
| 185 | | >>> w = USStateSelect() |
|---|
| 186 | | >>> print w.render('state', 'IL') |
|---|
| 187 | | <select name="state"> |
|---|
| 188 | | <option value="AL">Alabama</option> |
|---|
| 189 | | <option value="AK">Alaska</option> |
|---|
| 190 | | <option value="AS">American Samoa</option> |
|---|
| 191 | | <option value="AZ">Arizona</option> |
|---|
| 192 | | <option value="AR">Arkansas</option> |
|---|
| 193 | | <option value="CA">California</option> |
|---|
| 194 | | <option value="CO">Colorado</option> |
|---|
| 195 | | <option value="CT">Connecticut</option> |
|---|
| 196 | | <option value="DE">Delaware</option> |
|---|
| 197 | | <option value="DC">District of Columbia</option> |
|---|
| 198 | | <option value="FM">Federated States of Micronesia</option> |
|---|
| 199 | | <option value="FL">Florida</option> |
|---|
| 200 | | <option value="GA">Georgia</option> |
|---|
| 201 | | <option value="GU">Guam</option> |
|---|
| 202 | | <option value="HI">Hawaii</option> |
|---|
| 203 | | <option value="ID">Idaho</option> |
|---|
| 204 | | <option value="IL" selected="selected">Illinois</option> |
|---|
| 205 | | <option value="IN">Indiana</option> |
|---|
| 206 | | <option value="IA">Iowa</option> |
|---|
| 207 | | <option value="KS">Kansas</option> |
|---|
| 208 | | <option value="KY">Kentucky</option> |
|---|
| 209 | | <option value="LA">Louisiana</option> |
|---|
| 210 | | <option value="ME">Maine</option> |
|---|
| 211 | | <option value="MH">Marshall Islands</option> |
|---|
| 212 | | <option value="MD">Maryland</option> |
|---|
| 213 | | <option value="MA">Massachusetts</option> |
|---|
| 214 | | <option value="MI">Michigan</option> |
|---|
| 215 | | <option value="MN">Minnesota</option> |
|---|
| 216 | | <option value="MS">Mississippi</option> |
|---|
| 217 | | <option value="MO">Missouri</option> |
|---|
| 218 | | <option value="MT">Montana</option> |
|---|
| 219 | | <option value="NE">Nebraska</option> |
|---|
| 220 | | <option value="NV">Nevada</option> |
|---|
| 221 | | <option value="NH">New Hampshire</option> |
|---|
| 222 | | <option value="NJ">New Jersey</option> |
|---|
| 223 | | <option value="NM">New Mexico</option> |
|---|
| 224 | | <option value="NY">New York</option> |
|---|
| 225 | | <option value="NC">North Carolina</option> |
|---|
| 226 | | <option value="ND">North Dakota</option> |
|---|
| 227 | | <option value="MP">Northern Mariana Islands</option> |
|---|
| 228 | | <option value="OH">Ohio</option> |
|---|
| 229 | | <option value="OK">Oklahoma</option> |
|---|
| 230 | | <option value="OR">Oregon</option> |
|---|
| 231 | | <option value="PW">Palau</option> |
|---|
| 232 | | <option value="PA">Pennsylvania</option> |
|---|
| 233 | | <option value="PR">Puerto Rico</option> |
|---|
| 234 | | <option value="RI">Rhode Island</option> |
|---|
| 235 | | <option value="SC">South Carolina</option> |
|---|
| 236 | | <option value="SD">South Dakota</option> |
|---|
| 237 | | <option value="TN">Tennessee</option> |
|---|
| 238 | | <option value="TX">Texas</option> |
|---|
| 239 | | <option value="UT">Utah</option> |
|---|
| 240 | | <option value="VT">Vermont</option> |
|---|
| 241 | | <option value="VI">Virgin Islands</option> |
|---|
| 242 | | <option value="VA">Virginia</option> |
|---|
| 243 | | <option value="WA">Washington</option> |
|---|
| 244 | | <option value="WV">West Virginia</option> |
|---|
| 245 | | <option value="WI">Wisconsin</option> |
|---|
| 246 | | <option value="WY">Wyoming</option> |
|---|
| 247 | | </select> |
|---|
| 248 | | |
|---|
| 249 | | # USSocialSecurityNumberField ################################################# |
|---|
| 250 | | >>> from django.contrib.localflavor.us.forms import USSocialSecurityNumberField |
|---|
| 251 | | >>> f = USSocialSecurityNumberField() |
|---|
| 252 | | >>> f.clean('987-65-4330') |
|---|
| 253 | | u'987-65-4330' |
|---|
| 254 | | >>> f.clean('987654330') |
|---|
| 255 | | u'987-65-4330' |
|---|
| 256 | | >>> f.clean('078-05-1120') |
|---|
| 257 | | Traceback (most recent call last): |
|---|
| 258 | | ... |
|---|
| 259 | | ValidationError: [u'Enter a valid U.S. Social Security number in XXX-XX-XXXX format.'] |
|---|
| 260 | | |
|---|
| 261 | | # UKPostcodeField ############################################################# |
|---|
| 262 | | |
|---|
| 263 | | UKPostcodeField validates that the data is a valid UK postcode. |
|---|
| 264 | | >>> from django.contrib.localflavor.uk.forms import UKPostcodeField |
|---|
| 265 | | >>> f = UKPostcodeField() |
|---|
| 266 | | >>> f.clean('BT32 4PX') |
|---|
| 267 | | u'BT32 4PX' |
|---|
| 268 | | >>> f.clean('GIR 0AA') |
|---|
| 269 | | u'GIR 0AA' |
|---|
| 270 | | >>> f.clean('BT324PX') |
|---|
| 271 | | Traceback (most recent call last): |
|---|
| 272 | | ... |
|---|
| 273 | | ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] |
|---|
| 274 | | >>> f.clean('1NV 4L1D') |
|---|
| 275 | | Traceback (most recent call last): |
|---|
| 276 | | ... |
|---|
| 277 | | ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] |
|---|
| 278 | | >>> f.clean(None) |
|---|
| 279 | | Traceback (most recent call last): |
|---|
| 280 | | ... |
|---|
| 281 | | ValidationError: [u'This field is required.'] |
|---|
| 282 | | >>> f.clean('') |
|---|
| 283 | | Traceback (most recent call last): |
|---|
| 284 | | ... |
|---|
| 285 | | ValidationError: [u'This field is required.'] |
|---|
| 286 | | |
|---|
| 287 | | >>> f = UKPostcodeField(required=False) |
|---|
| 288 | | >>> f.clean('BT32 4PX') |
|---|
| 289 | | u'BT32 4PX' |
|---|
| 290 | | >>> f.clean('GIR 0AA') |
|---|
| 291 | | u'GIR 0AA' |
|---|
| 292 | | >>> f.clean('1NV 4L1D') |
|---|
| 293 | | Traceback (most recent call last): |
|---|
| 294 | | ... |
|---|
| 295 | | ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] |
|---|
| 296 | | >>> f.clean('BT324PX') |
|---|
| 297 | | Traceback (most recent call last): |
|---|
| 298 | | ... |
|---|
| 299 | | ValidationError: [u'Enter a postcode. A space is required between the two postcode parts.'] |
|---|
| 300 | | >>> f.clean(None) |
|---|
| 301 | | u'' |
|---|
| 302 | | >>> f.clean('') |
|---|
| 303 | | u'' |
|---|
| 304 | | |
|---|
| 305 | | # FRZipCodeField ############################################################# |
|---|
| 306 | | |
|---|
| 307 | | FRZipCodeField validates that the data is a valid FR zipcode. |
|---|
| 308 | | >>> from django.contrib.localflavor.fr.forms import FRZipCodeField |
|---|
| 309 | | >>> f = FRZipCodeField() |
|---|
| 310 | | >>> f.clean('75001') |
|---|
| 311 | | u'75001' |
|---|
| 312 | | >>> f.clean('93200') |
|---|
| 313 | | u'93200' |
|---|
| 314 | | >>> f.clean('2A200') |
|---|
| 315 | | Traceback (most recent call last): |
|---|
| 316 | | ... |
|---|
| 317 | | ValidationError: [u'Enter a zip code in the format XXXXX.'] |
|---|
| 318 | | >>> f.clean('980001') |
|---|
| 319 | | Traceback (most recent call last): |
|---|
| 320 | | ... |
|---|
| 321 | | ValidationError: [u'Enter a zip code in the format XXXXX.'] |
|---|
| 322 | | >>> f.clean(None) |
|---|
| 323 | | Traceback (most recent call last): |
|---|
| 324 | | ... |
|---|
| 325 | | ValidationError: [u'This field is required.'] |
|---|
| 326 | | >>> f.clean('') |
|---|
| 327 | | Traceback (most recent call last): |
|---|
| 328 | | ... |
|---|
| 329 | | ValidationError: [u'This field is required.'] |
|---|
| 330 | | |
|---|
| 331 | | >>> f = FRZipCodeField(required=False) |
|---|
| 332 | | >>> f.clean('75001') |
|---|
| 333 | | u'75001' |
|---|
| 334 | | >>> f.clean('93200') |
|---|
| 335 | | u'93200' |
|---|
| 336 | | >>> f.clean('2A200') |
|---|
| 337 | | Traceback (most recent call last): |
|---|
| 338 | | ... |
|---|
| 339 | | ValidationError: [u'Enter a zip code in the format XXXXX.'] |
|---|
| 340 | | >>> f.clean('980001') |
|---|
| 341 | | Traceback (most recent call last): |
|---|
| 342 | | ... |
|---|
| 343 | | ValidationError: [u'Enter a zip code in the format XXXXX.'] |
|---|
| 344 | | >>> f.clean(None) |
|---|
| 345 | | u'' |
|---|
| 346 | | >>> f.clean('') |
|---|
| 347 | | u'' |
|---|
| 348 | | |
|---|
| 349 | | |
|---|
| 350 | | # FRPhoneNumberField ########################################################## |
|---|
| 351 | | |
|---|
| 352 | | FRPhoneNumberField validates that the data is a valid french phone number. |
|---|
| 353 | | It's normalized to 0X XX XX XX XX format. Dots are valid too. |
|---|
| 354 | | >>> from django.contrib.localflavor.fr.forms import FRPhoneNumberField |
|---|
| 355 | | >>> f = FRPhoneNumberField() |
|---|
| 356 | | >>> f.clean('01 55 44 58 64') |
|---|
| 357 | | u'01 55 44 58 64' |
|---|
| 358 | | >>> f.clean('0155445864') |
|---|
| 359 | | u'01 55 44 58 64' |
|---|
| 360 | | >>> f.clean('01 5544 5864') |
|---|
| 361 | | u'01 55 44 58 64' |
|---|
| 362 | | >>> f.clean('01 55.44.58.64') |
|---|
| 363 | | u'01 55 44 58 64' |
|---|
| 364 | | >>> f.clean('01.55.44.58.64') |
|---|
| 365 | | u'01 55 44 58 64' |
|---|
| 366 | | >>> f.clean('01,55,44,58,64') |
|---|
| 367 | | Traceback (most recent call last): |
|---|
| 368 | | ... |
|---|
| 369 | | ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] |
|---|
| 370 | | >>> f.clean('555 015 544') |
|---|
| 371 | | Traceback (most recent call last): |
|---|
| 372 | | ... |
|---|
| 373 | | ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] |
|---|
| 374 | | >>> f.clean(None) |
|---|
| 375 | | Traceback (most recent call last): |
|---|
| 376 | | ... |
|---|
| 377 | | ValidationError: [u'This field is required.'] |
|---|
| 378 | | >>> f.clean('') |
|---|
| 379 | | Traceback (most recent call last): |
|---|
| 380 | | ... |
|---|
| 381 | | ValidationError: [u'This field is required.'] |
|---|
| 382 | | |
|---|
| 383 | | >>> f = FRPhoneNumberField(required=False) |
|---|
| 384 | | >>> f.clean('01 55 44 58 64') |
|---|
| 385 | | u'01 55 44 58 64' |
|---|
| 386 | | >>> f.clean('0155445864') |
|---|
| 387 | | u'01 55 44 58 64' |
|---|
| 388 | | >>> f.clean('01 5544 5864') |
|---|
| 389 | | u'01 55 44 58 64' |
|---|
| 390 | | >>> f.clean('01 55.44.58.64') |
|---|
| 391 | | u'01 55 44 58 64' |
|---|
| 392 | | >>> f.clean('01.55.44.58.64') |
|---|
| 393 | | u'01 55 44 58 64' |
|---|
| 394 | | >>> f.clean('01,55,44,58,64') |
|---|
| 395 | | Traceback (most recent call last): |
|---|
| 396 | | ... |
|---|
| 397 | | ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] |
|---|
| 398 | | >>> f.clean('555 015 544') |
|---|
| 399 | | Traceback (most recent call last): |
|---|
| 400 | | ... |
|---|
| 401 | | ValidationError: [u'Phone numbers must be in 0X XX XX XX XX format.'] |
|---|
| 402 | | >>> f.clean(None) |
|---|
| 403 | | u'' |
|---|
| 404 | | >>> f.clean('') |
|---|
| 405 | | u'' |
|---|
| 406 | | |
|---|
| 407 | | # FRDepartmentSelect ############################################################### |
|---|
| 408 | | |
|---|
| 409 | | FRDepartmentSelect is a Select widget that uses a list of french departments |
|---|
| 410 | | including DOM TOM |
|---|
| 411 | | >>> from django.contrib.localflavor.fr.forms import FRDepartmentSelect |
|---|
| 412 | | >>> w = FRDepartmentSelect() |
|---|
| 413 | | >>> print w.render('dep', 'Paris') |
|---|
| 414 | | <select name="dep"> |
|---|
| 415 | | <option value="01">01 - Ain</option> |
|---|
| 416 | | <option value="02">02 - Aisne</option> |
|---|
| 417 | | <option value="03">03 - Allier</option> |
|---|
| 418 | | <option value="04">04 - Alpes-de-Haute-Provence</option> |
|---|
| 419 | | <option value="05">05 - Hautes-Alpes</option> |
|---|
| 420 | | <option value="06">06 - Alpes-Maritimes</option> |
|---|
| 421 | | <option value="07">07 - Ardeche</option> |
|---|
| 422 | | <option value="08">08 - Ardennes</option> |
|---|
| 423 | | <option value="09">09 - Ariege</option> |
|---|
| 424 | | <option value="10">10 - Aube</option> |
|---|
| 425 | | <option value="11">11 - Aude</option> |
|---|
| 426 | | <option value="12">12 - Aveyron</option> |
|---|
| 427 | | <option value="13">13 - Bouches-du-Rhone</option> |
|---|
| 428 | | <option value="14">14 - Calvados</option> |
|---|
| 429 | | <option value="15">15 - Cantal</option> |
|---|
| 430 | | <option value="16">16 - Charente</option> |
|---|
| 431 | | <option value="17">17 - Charente-Maritime</option> |
|---|
| 432 | | <option value="18">18 - Cher</option> |
|---|
| 433 | | <option value="19">19 - Correze</option> |
|---|
| 434 | | <option value="21">21 - Cote-d'Or</option> |
|---|
| 435 | | <option value="22">22 - Cotes-d'Armor</option> |
|---|
| 436 | | <option value="23">23 - Creuse</option> |
|---|
| 437 | | <option value="24">24 - Dordogne</option> |
|---|
| 438 | | <option value="25">25 - Doubs</option> |
|---|
| 439 | | <option value="26">26 - Drome</option> |
|---|
| 440 | | <option value="27">27 - Eure</option> |
|---|
| 441 | | <option value="28">28 - Eure-et-Loire</option> |
|---|
| 442 | | <option value="29">29 - Finistere</option> |
|---|
| 443 | | <option value="2A">2A - Corse-du-Sud</option> |
|---|
| 444 | | <option value="2B">2B - Haute-Corse</option> |
|---|
| 445 | | <option value="30">30 - Gard</option> |
|---|
| 446 | | <option value="31">31 - Haute-Garonne</option> |
|---|
| 447 | | <option value="32">32 - Gers</option> |
|---|
| 448 | | <option value="33">33 - Gironde</option> |
|---|
| 449 | | <option value="34">34 - Herault</option> |
|---|
| 450 | | <option value="35">35 - Ille-et-Vilaine</option> |
|---|
| 451 | | <option value="36">36 - Indre</option> |
|---|
| 452 | | <option value="37">37 - Indre-et-Loire</option> |
|---|
| 453 | | <option value="38">38 - Isere</option> |
|---|
| 454 | | <option value="39">39 - Jura</option> |
|---|
| 455 | | <option value="40">40 - Landes</option> |
|---|
| 456 | | <option value="41">41 - Loir-et-Cher</option> |
|---|
| 457 | | <option value="42">42 - Loire</option> |
|---|
| 458 | | <option value="43">43 - Haute-Loire</option> |
|---|
| 459 | | <option value="44">44 - Loire-Atlantique</option> |
|---|
| 460 | | <option value="45">45 - Loiret</option> |
|---|
| 461 | | <option value="46">46 - Lot</option> |
|---|
| 462 | | <option value="47">47 - Lot-et-Garonne</option> |
|---|
| 463 | | <option value="48">48 - Lozere</option> |
|---|
| 464 | | <option value="49">49 - Maine-et-Loire</option> |
|---|
| 465 | | <option value="50">50 - Manche</option> |
|---|
| 466 | | <option value="51">51 - Marne</option> |
|---|
| 467 | | <option value="52">52 - Haute-Marne</option> |
|---|
| 468 | | <option value="53">53 - Mayenne</option> |
|---|
| 469 | | <option value="54">54 - Meurthe-et-Moselle</option> |
|---|
| 470 | | <option value="55">55 - Meuse</option> |
|---|
| 471 | | <option value="56">56 - Morbihan</option> |
|---|
| 472 | | <option value="57">57 - Moselle</option> |
|---|
| 473 | | <option value="58">58 - Nievre</option> |
|---|
| 474 | | <option value="59">59 - Nord</option> |
|---|
| 475 | | <option value="60">60 - Oise</option> |
|---|
| 476 | | <option value="61">61 - Orne</option> |
|---|
| 477 | | <option value="62">62 - Pas-de-Calais</option> |
|---|
| 478 | | <option value="63">63 - Puy-de-Dome</option> |
|---|
| 479 | | <option value="64">64 - Pyrenees-Atlantiques</option> |
|---|
| 480 | | <option value="65">65 - Hautes-Pyrenees</option> |
|---|
| 481 | | <option value="66">66 - Pyrenees-Orientales</option> |
|---|
| 482 | | <option value="67">67 - Bas-Rhin</option> |
|---|
| 483 | | <option value="68">68 - Haut-Rhin</option> |
|---|
| 484 | | <option value="69">69 - Rhone</option> |
|---|
| 485 | | <option value="70">70 - Haute-Saone</option> |
|---|
| 486 | | <option value="71">71 - Saone-et-Loire</option> |
|---|
| 487 | | <option value="72">72 - Sarthe</option> |
|---|
| 488 | | <option value="73">73 - Savoie</option> |
|---|
| 489 | | <option value="74">74 - Haute-Savoie</option> |
|---|
| 490 | | <option value="75">75 - Paris</option> |
|---|
| 491 | | <option value="76">76 - Seine-Maritime</option> |
|---|
| 492 | | <option value="77">77 - Seine-et-Marne</option> |
|---|
| 493 | | <option value="78">78 - Yvelines</option> |
|---|
| 494 | | <option value="79">79 - Deux-Sevres</option> |
|---|
| 495 | | <option value="80">80 - Somme</option> |
|---|
| 496 | | <option value="81">81 - Tarn</option> |
|---|
| 497 | | <option value="82">82 - Tarn-et-Garonne</option> |
|---|
| 498 | | <option value="83">83 - Var</option> |
|---|
| 499 | | <option value="84">84 - Vaucluse</option> |
|---|
| 500 | | <option value="85">85 - Vendee</option> |
|---|
| 501 | | <option value="86">86 - Vienne</option> |
|---|
| 502 | | <option value="87">87 - Haute-Vienne</option> |
|---|
| 503 | | <option value="88">88 - Vosges</option> |
|---|
| 504 | | <option value="89">89 - Yonne</option> |
|---|
| 505 | | <option value="90">90 - Territoire de Belfort</option> |
|---|
| 506 | | <option value="91">91 - Essonne</option> |
|---|
| 507 | | <option value="92">92 - Hauts-de-Seine</option> |
|---|
| 508 | | <option value="93">93 - Seine-Saint-Denis</option> |
|---|
| 509 | | <option value="94">94 - Val-de-Marne</option> |
|---|
| 510 | | <option value="95">95 - Val-d'Oise</option> |
|---|
| 511 | | <option value="2A">2A - Corse du sud</option> |
|---|
| 512 | | <option value="2B">2B - Haute Corse</option> |
|---|
| 513 | | <option value="971">971 - Guadeloupe</option> |
|---|
| 514 | | <option value="972">972 - Martinique</option> |
|---|
| 515 | | <option value="973">973 - Guyane</option> |
|---|
| 516 | | <option value="974">974 - La Reunion</option> |
|---|
| 517 | | <option value="975">975 - Saint-Pierre-et-Miquelon</option> |
|---|
| 518 | | <option value="976">976 - Mayotte</option> |
|---|
| 519 | | <option value="984">984 - Terres Australes et Antarctiques</option> |
|---|
| 520 | | <option value="986">986 - Wallis et Futuna</option> |
|---|
| 521 | | <option value="987">987 - Polynesie Francaise</option> |
|---|
| 522 | | <option value="988">988 - Nouvelle-Caledonie</option> |
|---|
| 523 | | </select> |
|---|
| 524 | | |
|---|
| 525 | | # JPPostalCodeField ############################################################### |
|---|
| 526 | | |
|---|
| 527 | | A form field that validates its input is a Japanese postcode. |
|---|
| 528 | | |
|---|
| 529 | | Accepts 7 digits(with/out hyphen). |
|---|
| 530 | | >>> from django.contrib.localflavor.jp.forms import JPPostalCodeField |
|---|
| 531 | | >>> f = JPPostalCodeField() |
|---|
| 532 | | >>> f.clean('251-0032') |
|---|
| 533 | | u'2510032' |
|---|
| 534 | | >>> f.clean('2510032') |
|---|
| 535 | | u'2510032' |
|---|
| 536 | | >>> f.clean('2510-032') |
|---|
| 537 | | Traceback (most recent call last): |
|---|
| 538 | | ... |
|---|
| 539 | | ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] |
|---|
| 540 | | >>> f.clean('251a0032') |
|---|
| 541 | | Traceback (most recent call last): |
|---|
| 542 | | ... |
|---|
| 543 | | ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] |
|---|
| 544 | | >>> f.clean('a51-0032') |
|---|
| 545 | | Traceback (most recent call last): |
|---|
| 546 | | ... |
|---|
| 547 | | ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] |
|---|
| 548 | | >>> f.clean('25100321') |
|---|
| 549 | | Traceback (most recent call last): |
|---|
| 550 | | ... |
|---|
| 551 | | ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] |
|---|
| 552 | | >>> f.clean('') |
|---|
| 553 | | Traceback (most recent call last): |
|---|
| 554 | | ... |
|---|
| 555 | | ValidationError: [u'This field is required.'] |
|---|
| 556 | | |
|---|
| 557 | | >>> f = JPPostalCodeField(required=False) |
|---|
| 558 | | >>> f.clean('251-0032') |
|---|
| 559 | | u'2510032' |
|---|
| 560 | | >>> f.clean('2510032') |
|---|
| 561 | | u'2510032' |
|---|
| 562 | | >>> f.clean('2510-032') |
|---|
| 563 | | Traceback (most recent call last): |
|---|
| 564 | | ... |
|---|
| 565 | | ValidationError: [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.'] |
|---|
| 566 | | >>> f.clean('') |
|---|
| 567 | | u'' |
|---|
| 568 | | >>> f.clean(None) |
|---|
| 569 | | u'' |
|---|
| 570 | | |
|---|
| 571 | | # JPPrefectureSelect ############################################################### |
|---|
| 572 | | |
|---|
| 573 | | A Select widget that uses a list of Japanese prefectures as its choices. |
|---|
| 574 | | >>> from django.contrib.localflavor.jp.forms import JPPrefectureSelect |
|---|
| 575 | | >>> w = JPPrefectureSelect() |
|---|
| 576 | | >>> print w.render('prefecture', 'kanagawa') |
|---|
| 577 | | <select name="prefecture"> |
|---|
| 578 | | <option value="hokkaido">Hokkaido</option> |
|---|
| 579 | | <option value="aomori">Aomori</option> |
|---|
| 580 | | <option value="iwate">Iwate</option> |
|---|
| 581 | | <option value="miyagi">Miyagi</option> |
|---|
| 582 | | <option value="akita">Akita</option> |
|---|
| 583 | | <option value="yamagata">Yamagata</option> |
|---|
| 584 | | <option value="fukushima">Fukushima</option> |
|---|
| 585 | | <option value="ibaraki">Ibaraki</option> |
|---|
| 586 | | <option value="tochigi">Tochigi</option> |
|---|
| 587 | | <option value="gunma">Gunma</option> |
|---|
| 588 | | <option value="saitama">Saitama</option> |
|---|
| 589 | | <option value="chiba">Chiba</option> |
|---|
| 590 | | <option value="tokyo">Tokyo</option> |
|---|
| 591 | | <option value="kanagawa" selected="selected">Kanagawa</option> |
|---|
| 592 | | <option value="yamanashi">Yamanashi</option> |
|---|
| 593 | | <option value="nagano">Nagano</option> |
|---|
| 594 | | <option value="niigata">Niigata</option> |
|---|
| 595 | | <option value="toyama">Toyama</option> |
|---|
| 596 | | <option value="ishikawa">Ishikawa</option> |
|---|
| 597 | | <option value="fukui">Fukui</option> |
|---|
| 598 | | <option value="gifu">Gifu</option> |
|---|
| 599 | | <option value="shizuoka">Shizuoka</option> |
|---|
| 600 | | <option value="aichi">Aichi</option> |
|---|
| 601 | | <option value="mie">Mie</option> |
|---|
| 602 | | <option value="shiga">Shiga</option> |
|---|
| 603 | | <option value="kyoto">Kyoto</option> |
|---|
| 604 | | <option value="osaka">Osaka</option> |
|---|
| 605 | | <option value="hyogo">Hyogo</option> |
|---|
| 606 | | <option value="nara">Nara</option> |
|---|
| 607 | | <option value="wakayama">Wakayama</option> |
|---|
| 608 | | <option value="tottori">Tottori</option> |
|---|
| 609 | | <option value="shimane">Shimane</option> |
|---|
| 610 | | <option value="okayama">Okayama</option> |
|---|
| 611 | | <option value="hiroshima">Hiroshima</option> |
|---|
| 612 | | <option value="yamaguchi">Yamaguchi</option> |
|---|
| 613 | | <option value="tokushima">Tokushima</option> |
|---|
| 614 | | <option value="kagawa">Kagawa</option> |
|---|
| 615 | | <option value="ehime">Ehime</option> |
|---|
| 616 | | <option value="kochi">Kochi</option> |
|---|
| 617 | | <option value="fukuoka">Fukuoka</option> |
|---|
| 618 | | <option value="saga">Saga</option> |
|---|
| 619 | | <option value="nagasaki">Nagasaki</option> |
|---|
| 620 | | <option value="kumamoto">Kumamoto</option> |
|---|
| 621 | | <option value="oita">Oita</option> |
|---|
| 622 | | <option value="miyazaki">Miyazaki</option> |
|---|
| 623 | | <option value="kagoshima">Kagoshima</option> |
|---|
| 624 | | <option value="okinawa">Okinawa</option> |
|---|
| 625 | | </select> |
|---|
| 626 | | |
|---|
| 627 | | # ITZipCodeField ############################################################# |
|---|
| 628 | | |
|---|
| 629 | | >>> from django.contrib.localflavor.it.forms import ITZipCodeField |
|---|
| 630 | | >>> f = ITZipCodeField() |
|---|
| 631 | | >>> f.clean('00100') |
|---|
| 632 | | u'00100' |
|---|
| 633 | | >>> f.clean(' 00100') |
|---|
| 634 | | Traceback (most recent call last): |
|---|
| 635 | | ... |
|---|
| 636 | | ValidationError: [u'Enter a valid zip code.'] |
|---|
| 637 | | |
|---|
| 638 | | # ITRegionSelect ############################################################# |
|---|
| 639 | | |
|---|
| 640 | | >>> from django.contrib.localflavor.it.forms import ITRegionSelect |
|---|
| 641 | | >>> w = ITRegionSelect() |
|---|
| 642 | | >>> w.render('regions', 'PMN') |
|---|
| 643 | | u'<select name="regions">\n<option value="ABR">Abruzzo</option>\n<option value="BAS">Basilicata</option>\n<option value="CAL">Calabria</option>\n<option value="CAM">Campania</option>\n<option value="EMR">Emilia-Romagna</option>\n<option value="FVG">Friuli-Venezia Giulia</option>\n<option value="LAZ">Lazio</option>\n<option value="LIG">Liguria</option>\n<option value="LOM">Lombardia</option>\n<option value="MAR">Marche</option>\n<option value="MOL">Molise</option>\n<option value="PMN" selected="selected">Piemonte</option>\n<option value="PUG">Puglia</option>\n<option value="SAR">Sardegna</option>\n<option value="SIC">Sicilia</option>\n<option value="TOS">Toscana</option>\n<option value="TAA">Trentino-Alto Adige</option>\n<option value="UMB">Umbria</option>\n<option value="VAO">Valle d\u2019Aosta</option>\n<option value="VEN">Veneto</option>\n</select>' |
|---|
| 644 | | |
|---|
| 645 | | # ITSocialSecurityNumberField ################################################# |
|---|
| 646 | | |
|---|
| 647 | | >>> from django.contrib.localflavor.it.forms import ITSocialSecurityNumberField |
|---|
| 648 | | >>> f = ITSocialSecurityNumberField() |
|---|
| 649 | | >>> f.clean('LVSGDU99T71H501L') |
|---|
| 650 | | u'LVSGDU99T71H501L' |
|---|
| 651 | | >>> f.clean('LBRRME11A01L736W') |
|---|
| 652 | | u'LBRRME11A01L736W' |
|---|
| 653 | | >>> f.clean('lbrrme11a01l736w') |
|---|
| 654 | | u'LBRRME11A01L736W' |
|---|
| 655 | | >>> f.clean('LBR RME 11A01 L736W') |
|---|
| 656 | | u'LBRRME11A01L736W' |
|---|
| 657 | | >>> f.clean('LBRRME11A01L736A') |
|---|
| 658 | | Traceback (most recent call last): |
|---|
| 659 | | ... |
|---|
| 660 | | ValidationError: [u'Enter a valid Social Security number.'] |
|---|
| 661 | | >>> f.clean('%BRRME11A01L736W') |
|---|
| 662 | | Traceback (most recent call last): |
|---|
| 663 | | ... |
|---|
| 664 | | ValidationError: [u'Enter a valid Social Security number.'] |
|---|
| 665 | | |
|---|
| 666 | | # ITVatNumberField ########################################################### |
|---|
| 667 | | |
|---|
| 668 | | >>> from django.contrib.localflavor.it.forms import ITVatNumberField |
|---|
| 669 | | >>> f = ITVatNumberField() |
|---|
| 670 | | >>> f.clean('07973780013') |
|---|
| 671 | | u'07973780013' |
|---|
| 672 | | >>> f.clean('7973780013') |
|---|
| 673 | | u'07973780013' |
|---|
| 674 | | >>> f.clean(7973780013) |
|---|
| 675 | | u'07973780013' |
|---|
| 676 | | >>> f.clean('07973780014') |
|---|
| 677 | | Traceback (most recent call last): |
|---|
| 678 | | ... |
|---|
| 679 | | ValidationError: [u'Enter a valid VAT number.'] |
|---|
| 680 | | >>> f.clean('A7973780013') |
|---|
| 681 | | Traceback (most recent call last): |
|---|
| 682 | | ... |
|---|
| 683 | | ValidationError: [u'Enter a valid VAT number.'] |
|---|
| 684 | | |
|---|
| 685 | | # FIZipCodeField ############################################################# |
|---|
| 686 | | |
|---|
| 687 | | FIZipCodeField validates that the data is a valid FI zipcode. |
|---|
| 688 | | >>> from django.contrib.localflavor.fi.forms import FIZipCodeField |
|---|
| 689 | | >>> f = FIZipCodeField() |
|---|
| 690 | | >>> f.clean('20540') |
|---|
| 691 | | u'20540' |
|---|
| 692 | | >>> f.clean('20101') |
|---|
| 693 | | u'20101' |
|---|
| 694 | | >>> f.clean('20s40') |
|---|
| 695 | | Traceback (most recent call last): |
|---|
| 696 | | ... |
|---|
| 697 | | ValidationError: [u'Enter a zip code in the format XXXXX.'] |
|---|
| 698 | | >>> f.clean('205401') |
|---|
| 699 | | Traceback (most recent call last): |
|---|
| 700 | | ... |
|---|
| 701 | | ValidationError: [u'Enter a zip code in the format XXXXX.'] |
|---|
| 702 | | >>> f.clean(None) |
|---|
| 703 | | Traceback (most recent call last): |
|---|
| 704 | | ... |
|---|
| 705 | | ValidationError: [u'This field is required.'] |
|---|
| 706 | | >>> f.clean('') |
|---|
| 707 | | Traceback (most recent call last): |
|---|
| 708 | | ... |
|---|
| 709 | | ValidationError: [u'This field is required.'] |
|---|
| 710 | | |
|---|
| 711 | | >>> f = FIZipCodeField(required=False) |
|---|
| 712 | | >>> f.clean('20540') |
|---|
| 713 | | u'20540' |
|---|
| 714 | | >>> f.clean('20101') |
|---|
| 715 | | u'20101' |
|---|
| 716 | | >>> f.clean('20s40') |
|---|
| 717 | | Traceback (most recent call last): |
|---|
| 718 | | ... |
|---|
| 719 | | ValidationError: [u'Enter a zip code in the format XXXXX.'] |
|---|
| 720 | | >>> f.clean('205401') |
|---|
| 721 | | Traceback (most recent call last): |
|---|
| 722 | | ... |
|---|
| 723 | | ValidationError: [u'Enter a zip code in the format XXXXX.'] |
|---|
| 724 | | >>> f.clean(None) |
|---|
| 725 | | u'' |
|---|
| 726 | | >>> f.clean('') |
|---|
| 727 | | u'' |
|---|
| 728 | | |
|---|
| 729 | | # FIMunicipalitySelect ############################################################### |
|---|
| 730 | | |
|---|
| 731 | | A Select widget that uses a list of Finnish municipalities as its choices. |
|---|
| 732 | | >>> from django.contrib.localflavor.fi.forms import FIMunicipalitySelect |
|---|
| 733 | | >>> w = FIMunicipalitySelect() |
|---|
| 734 | | >>> unicode(w.render('municipalities', 'turku')) |
|---|
| 735 | | u'<select name="municipalities">\n<option value="akaa">Akaa</option>\n<option value="alaharma">Alah\xe4rm\xe4</option>\n<option value="alajarvi">Alaj\xe4rvi</option>\n<option value="alastaro">Alastaro</option>\n<option value="alavieska">Alavieska</option>\n<option value="alavus">Alavus</option>\n<option value="anjalankoski">Anjalankoski</option>\n<option value="artjarvi">Artj\xe4rvi</option>\n<option value="asikkala">Asikkala</option>\n<option value="askainen">Askainen</option>\n<option value="askola">Askola</option>\n<option value="aura">Aura</option>\n<option value="brando">Br\xe4nd\xf6</option>\n<option value="dragsfjard">Dragsfj\xe4rd</option>\n<option value="eckero">Ecker\xf6</option>\n<option value="elimaki">Elim\xe4ki</option>\n<option value="eno">Eno</option>\n<option value="enonkoski">Enonkoski</option>\n<option value="enontekio">Enonteki\xf6</option>\n<option value="espoo">Espoo</option>\n<option value="eura">Eura</option>\n<option value="eurajoki">Eurajoki</option>\n<option value="evijarvi">Evij\xe4rvi</option>\n<option value="finstrom">Finstr\xf6m</option>\n<option value="forssa">Forssa</option>\n<option value="foglo">F\xf6gl\xf6</option>\n<option value="geta">Geta</option>\n<option value="haapajarvi">Haapaj\xe4rvi</option>\n<option value="haapavesi">Haapavesi</option>\n<option value="hailuoto">Hailuoto</option>\n<option value="halikko">Halikko</option>\n<option value="halsua">Halsua</option>\n<option value="hamina">Hamina</option>\n<option value="hammarland">Hammarland</option>\n<option value="hankasalmi">Hankasalmi</option>\n<option value="hanko">Hanko</option>\n<option value="harjavalta">Harjavalta</option>\n<option value="hartola">Hartola</option>\n<option value="hattula">Hattula</option>\n<option value="hauho">Hauho</option>\n<option value="haukipudas">Haukipudas</option>\n<option value="hausjarvi">Hausj\xe4rvi</option>\n<option value="heinola">Heinola</option>\n<option value="heinavesi">Hein\xe4vesi</option>\n<option value="helsinki">Helsinki</option>\n<option value="himanka">Himanka</option>\n<option value="hirvensalmi">Hirvensalmi</option>\n<option value="hollola">Hollola</option>\n<option value="honkajoki">Honkajoki</option>\n<option value="houtskari">Houtskari</option>\n<option value="huittinen">Huittinen</option>\n<option value="humppila">Humppila</option>\n<option value="hyrynsalmi">Hyrynsalmi</option>\n<option value="hyvinkaa">Hyvink\xe4\xe4</option>\n<option value="hameenkoski">H\xe4meenkoski</option>\n<option value="hameenkyro">H\xe4meenkyr\xf6</option>\n<option value="hameenlinna">H\xe4meenlinna</option>\n<option value="ii">Ii</option>\n<option value="iisalmi">Iisalmi</option>\n<option value="iitti">Iitti</option>\n<option value="ikaalinen">Ikaalinen</option>\n<option value="ilmajoki">Ilmajoki</option>\n<option value="ilomantsi">Ilomantsi</option>\n<option value="imatra">Imatra</option>\n<option value="inari">Inari</option>\n<option value="inio">Ini\xf6</option>\n<option value="inkoo">Inkoo</option>\n<option value="isojoki">Isojoki</option>\n<option value="isokyro">Isokyr\xf6</option>\n<option value="jaala">Jaala</option>\n<option value="jalasjarvi">Jalasj\xe4rvi</option>\n<option value="janakkala">Janakkala</option>\n<option value="joensuu">Joensuu</option>\n<option value="jokioinen">Jokioinen</option>\n<option value="jomala">Jomala</option>\n<option value="joroinen">Joroinen</option>\n<option value="joutsa">Joutsa</option>\n<option value="joutseno">Joutseno</option>\n<option value="juankoski">Juankoski</option>\n<option value="jurva">Jurva</option>\n<option value="juuka">Juuka</option>\n<option value="juupajoki">Juupajoki</option>\n<option value="juva">Juva</option>\n<option value="jyvaskyla">Jyv\xe4skyl\xe4</option>\n<option value="jyvaskylan_mlk">Jyv\xe4skyl\xe4n maalaiskunta</option>\n<option value="jamijarvi">J\xe4mij\xe4rvi</option>\n<option value="jamsa">J\xe4ms\xe4</option>\n<option value="jamsankoski">J\xe4ms\xe4nkoski</option>\n<option value="jarvenpaa">J\xe4rvenp\xe4\xe4</option>\n<option value="kaarina">Kaarina</option>\n<option value="kaavi">Kaavi</option>\n<option value="kajaani">Kajaani</option>\n<option value="kalajoki">Kalajoki</option>\n<option value="kalvola">Kalvola</option>\n<option value="kangasala">Kangasala</option>\n<option value="kangasniemi">Kangasniemi</option>\n<option value="kankaanpaa">Kankaanp\xe4\xe4</option>\n<option value="kannonkoski">Kannonkoski</option>\n<option value="kannus">Kannus</option>\n<option value="karijoki">Karijoki</option>\n<option value="karjaa">Karjaa</option>\n<option value="karjalohja">Karjalohja</option>\n<option value="karkkila">Karkkila</option>\n<option value="karstula">Karstula</option>\n<option value="karttula">Karttula</option>\n<option value="karvia">Karvia</option>\n<option value="kaskinen">Kaskinen</option>\n<option value="kauhajoki">Kauhajoki</option>\n<option value="kauhava">Kauhava</option>\n<option value="kauniainen">Kauniainen</option>\n<option value="kaustinen">Kaustinen</option>\n<option value="keitele">Keitele</option>\n<option value="kemi">Kemi</option>\n<option value="kemijarvi">Kemij\xe4rvi</option>\n<option value="keminmaa">Keminmaa</option>\n<option value="kemio">Kemi\xf6</option>\n<option value="kempele">Kempele</option>\n<option value="kerava">Kerava</option>\n<option value="kerimaki">Kerim\xe4ki</option>\n<option value="kestila">Kestil\xe4</option>\n<option value="kesalahti">Kes\xe4lahti</option>\n<option value="keuruu">Keuruu</option>\n<option value="kihnio">Kihni\xf6</option>\n<option value="kiikala">Kiikala</option>\n<option value="kiikoinen">Kiikoinen</option>\n<option value="kiiminki">Kiiminki</option>\n<option value="kinnula">Kinnula</option>\n<option value="kirkkonummi">Kirkkonummi</option>\n<option value="kisko">Kisko</option>\n<option value="kitee">Kitee</option>\n<option value="kittila">Kittil\xe4</option>\n<option value="kiukainen">Kiukainen</option>\n<option value="kiuruvesi">Kiuruvesi</option>\n<option value="kivijarvi">Kivij\xe4rvi</option>\n<option value="kokemaki">Kokem\xe4ki</option>\n<option value="kokkola">Kokkola</option>\n<option value="kolari">Kolari</option>\n<option value="konnevesi">Konnevesi</option>\n<option value="kontiolahti">Kontiolahti</option>\n<option value="korpilahti">Korpilahti</option>\n<option value="korppoo">Korppoo</option>\n<option value="korsnas">Korsn\xe4s</option>\n<option value="kortesjarvi">Kortesj\xe4rvi</option>\n<option value="koskitl">KoskiTl</option>\n<option value="kotka">Kotka</option>\n<option value="kouvola">Kouvola</option>\n<option value="kristiinankaupunki">Kristiinankaupunki</option>\n<option value="kruunupyy">Kruunupyy</option>\n<option value="kuhmalahti">Kuhmalahti</option>\n<option value="kuhmo">Kuhmo</option>\n<option value="kuhmoinen">Kuhmoinen</option>\n<option value="kumlinge">Kumlinge</option>\n<option value="kuopio">Kuopio</option>\n<option value="kuortane">Kuortane</option>\n<option value="kurikka">Kurikka</option>\n<option value="kuru">Kuru</option>\n<option value="kustavi">Kustavi</option>\n<option value="kuusamo">Kuusamo</option>\n<option value="kuusankoski">Kuusankoski</option>\n<option value="kuusjoki">Kuusjoki</option>\n<option value="kylmakoski">Kylm\xe4koski</option>\n<option value="kyyjarvi">Kyyj\xe4rvi</option>\n<option value="kalvia">K\xe4lvi\xe4</option>\n<option value="karkola">K\xe4rk\xf6l\xe4</option>\n<option value="karsamaki">K\xe4rs\xe4m\xe4ki</option>\n<option value="kokar">K\xf6kar</option>\n<option value="koylio">K\xf6yli\xf6</option>\n<option value="lahti">Lahti</option>\n<option value="laihia">Laihia</option>\n<option value="laitila">Laitila</option>\n<option value="lammi">Lammi</option>\n<option value="lapinjarvi">Lapinj\xe4rvi</option>\n<option value="lapinlahti">Lapinlahti</option>\n<option value="lappajarvi">Lappaj\xe4rvi</option>\n<option value="lappeenranta">Lappeenranta</option>\n<option value="lappi">Lappi</option>\n<option value="lapua">Lapua</option>\n<option value="laukaa">Laukaa</option>\n<option value="lavia">Lavia</option>\n<option value="lehtimaki">Lehtim\xe4ki</option>\n<option value="leivonmaki">Leivonm\xe4ki</option>\n<option value="lemi">Lemi</option>\n<option value="lemland">Lemland</option>\n<option value="lempaala">Lemp\xe4\xe4l\xe4</option>\n<option value="lemu">Lemu</option>\n<option value="leppavirta">Lepp\xe4virta</option>\n<option value="lestijarvi">Lestij\xe4rvi</option>\n<option value="lieksa">Lieksa</option>\n<option value="lieto">Lieto</option>\n<option value="liljendal">Liljendal</option>\n<option value="liminka">Liminka</option>\n<option value="liperi">Liperi</option>\n<option value="lohja">Lohja</option>\n<option value="lohtaja">Lohtaja</option>\n<option value="loimaa">Loimaa</option>\n<option value="loppi">Loppi</option>\n<option value="loviisa">Loviisa</option>\n<option value="luhanka">Luhanka</option>\n<option value="lumijoki">Lumijoki</option>\n<option value="lumparland">Lumparland</option>\n<option value="luoto">Luoto</option>\n<option value="luumaki">Luum\xe4ki</option>\n<option value="luvia">Luvia</option>\n<option value="maalahti">Maalahti</option>\n<option value="maaninka">Maaninka</option>\n<option value="maarianhamina">Maarianhamina</option>\n<option value="marttila">Marttila</option>\n<option value="masku">Masku</option>\n<option value="mellila">Mellil\xe4</option>\n<option value="merijarvi">Merij\xe4rvi</option>\n<option value="merikarvia">Merikarvia</option>\n<option value="merimasku">Merimasku</option>\n<option value="miehikkala">Miehikk\xe4l\xe4</option>\n<option value="mikkeli">Mikkeli</option>\n<option value="mouhijarvi">Mouhij\xe4rvi</option>\n<option value="muhos">Muhos</option>\n<option value="multia">Multia</option>\n<option value="muonio">Muonio</option>\n<option value="mustasaari">Mustasaari</option>\n<option value="muurame">Muurame</option>\n<option value="muurla">Muurla</option>\n<option value="mynamaki">Myn\xe4m\xe4ki</option>\n<option value="myrskyla">Myrskyl\xe4</option>\n<option value="mantsala">M\xe4nts\xe4l\xe4</option>\n<option value="mantta">M\xe4ntt\xe4</option>\n<option value="mantyharju">M\xe4ntyharju</option>\n<option value="naantali">Naantali</option>\n<option value="nakkila">Nakkila</option>\n<option value="nastola">Nastola</option>\n<option value="nauvo">Nauvo</option>\n<option value="nilsia">Nilsi\xe4</option>\n<option value="nivala">Nivala</option>\n<option value="nokia">Nokia</option>\n<option value="noormarkku">Noormarkku</option>\n<option value="nousiainen">Nousiainen</option>\n<option value="nummi-pusula">Nummi-Pusula</option>\n<option value="nurmes">Nurmes</option>\n<option value="nurmijarvi">Nurmij\xe4rvi</option>\n<option value="nurmo">Nurmo</option>\n<option value="narpio">N\xe4rpi\xf6</option>\n<option value="oravainen">Oravainen</option>\n<option value="orimattila">Orimattila</option>\n<option value="oripaa">Orip\xe4\xe4</option>\n<option value="orivesi">Orivesi</option>\n<option value="oulainen">Oulainen</option>\n<option value="oulu">Oulu</option>\n<option value="oulunsalo">Oulunsalo</option>\n<option value="outokumpu">Outokumpu</option>\n<option value="padasjoki">Padasjoki</option>\n<option value="paimio">Paimio</option>\n<option value="paltamo">Paltamo</option>\n<option value="parainen">Parainen</option>\n<option value="parikkala">Parikkala</option>\n<option value="parkano">Parkano</option>\n<option value="pedersore">Peders\xf6re</option>\n<option value="pelkosenniemi">Pelkosenniemi</option>\n<option value="pello">Pello</option>\n<option value="perho">Perho</option>\n<option value="pernaja">Pernaja</option>\n<option value="pernio">Perni\xf6</option>\n<option value="pertteli">Pertteli</option>\n<option value="pertunmaa">Pertunmaa</option>\n<option value="petajavesi">Pet\xe4j\xe4vesi</option>\n<option value="pieksamaki">Pieks\xe4m\xe4ki</option>\n<option value="pielavesi">Pielavesi</option>\n<option value="pietarsaari">Pietarsaari</option>\n<option value="pihtipudas">Pihtipudas</option>\n<option value="piikkio">Piikki\xf6</option>\n<option value="piippola">Piippola</option>\n<option value="pirkkala">Pirkkala</option>\n<option value="pohja">Pohja</option>\n<option value="polvijarvi">Polvij\xe4rvi</option>\n<option value="pomarkku">Pomarkku</option>\n<option value="pori">Pori</option>\n<option value="pornainen">Pornainen</option>\n<option value="porvoo">Porvoo</option>\n<option value="posio">Posio</option>\n<option value="pudasjarvi">Pudasj\xe4rvi</option>\n<option value="pukkila">Pukkila</option>\n<option value="pulkkila">Pulkkila</option>\n<option value="punkaharju">Punkaharju</option>\n<option value="punkalaidun">Punkalaidun</option>\n<option value="puolanka">Puolanka</option>\n<option value="puumala">Puumala</option>\n<option value="pyhtaa">Pyht\xe4\xe4</option>\n<option value="pyhajoki">Pyh\xe4joki</option>\n<option value="pyhajarvi">Pyh\xe4j\xe4rvi</option>\n<option value="pyhanta">Pyh\xe4nt\xe4</option>\n<option value="pyharanta">Pyh\xe4ranta</option>\n<option value="pyhaselka">Pyh\xe4selk\xe4</option>\n<option value="pylkonmaki">Pylk\xf6nm\xe4ki</option>\n<option value="palkane">P\xe4lk\xe4ne</option>\n<option value="poytya">P\xf6yty\xe4</option>\n<option value="raahe">Raahe</option>\n<option value="raisio">Raisio</option>\n<option value="rantasalmi">Rantasalmi</option>\n<option value="rantsila">Rantsila</option>\n<option value="ranua">Ranua</option>\n<option value="rauma">Rauma</option>\n<option value="rautalampi">Rautalampi</option>\n<option value="rautavaara">Rautavaara</option>\n<option value="rautjarvi">Rautj\xe4rvi</option>\n<option value="reisjarvi">Reisj\xe4rvi</option>\n<option value="renko">Renko</option>\n<option value="riihimaki">Riihim\xe4ki</option>\n<option value="ristiina">Ristiina</option>\n<option value="ristijarvi">Ristij\xe4rvi</option>\n<option value="rovaniemi">Rovaniemi</option>\n<option value="ruokolahti">Ruokolahti</option>\n<option value="ruotsinpyhtaa">Ruotsinpyht\xe4\xe4</option>\n<option value="ruovesi">Ruovesi</option>\n<option value="rusko">Rusko</option>\n<option value="rymattyla">Rym\xe4ttyl\xe4</option>\n<option value="raakkyla">R\xe4\xe4kkyl\xe4</option>\n<option value="saarijarvi">Saarij\xe4rvi</option>\n<option value="salla">Salla</option>\n<option value="salo">Salo</option>\n<option value="saltvik">Saltvik</option>\n<option value="sammatti">Sammatti</option>\n<option value="sauvo">Sauvo</option>\n<option value="savitaipale">Savitaipale</option>\n<option value="savonlinna">Savonlinna</option>\n<option value="savonranta">Savonranta</option>\n<option value="savukoski">Savukoski</option>\n<option value="seinajoki">Sein\xe4joki</option>\n<option value="sievi">Sievi</option>\n<option value="siikainen">Siikainen</option>\n<option value="siikajoki">Siikajoki</option>\n<option value="siilinjarvi">Siilinj\xe4rvi</option>\n<option value="simo">Simo</option>\n<option value="sipoo">Sipoo</option>\n<option value="siuntio">Siuntio</option>\n<option value="sodankyla">Sodankyl\xe4</option>\n<option value="soini">Soini</option>\n<option value="somero">Somero</option>\n<option value="sonkajarvi">Sonkaj\xe4rvi</option>\n<option value="sotkamo">Sotkamo</option>\n<option value="sottunga">Sottunga</option>\n<option value="sulkava">Sulkava</option>\n<option value="sund">Sund</option>\n<option value="suomenniemi">Suomenniemi</option>\n<option value="suomusjarvi">Suomusj\xe4rvi</option>\n<option value="suomussalmi">Suomussalmi</option>\n<option value="suonenjoki">Suonenjoki</option>\n<option value="sysma">Sysm\xe4</option>\n<option value="sakyla">S\xe4kyl\xe4</option>\n<option value="sarkisalo">S\xe4rkisalo</option>\n<option value="taipalsaari">Taipalsaari</option>\n<option value="taivalkoski">Taivalkoski</option>\n<option value="taivassalo">Taivassalo</option>\n<option value="tammela">Tammela</option>\n<option value="tammisaari">Tammisaari</option>\n<option value="tampere">Tampere</option>\n<option value="tarvasjoki">Tarvasjoki</option>\n<option value="tervo">Tervo</option>\n<option value="tervola">Tervola</option>\n<option value="teuva">Teuva</option>\n<option value="tohmajarvi">Tohmaj\xe4rvi</option>\n<option value="toholampi">Toholampi</option>\n<option value="toivakka">Toivakka</option>\n<option value="tornio">Tornio</option>\n<option value="turku" selected="selected">Turku</option>\n<option value="tuulos">Tuulos</option>\n<option value="tuusniemi">Tuusniemi</option>\n<option value="tuusula">Tuusula</option>\n<option value="tyrnava">Tyrn\xe4v\xe4</option>\n<option value="toysa">T\xf6ys\xe4</option>\n<option value="ullava">Ullava</option>\n<option value="ulvila">Ulvila</option>\n<option value="urjala">Urjala</option>\n<option value="utajarvi">Utaj\xe4rvi</option>\n<option value="utsjoki">Utsjoki</option>\n<option value="uurainen">Uurainen</option>\n<option value="uusikaarlepyy">Uusikaarlepyy</option>\n<option value="uusikaupunki">Uusikaupunki</option>\n<option value="vaala">Vaala</option>\n<option value="vaasa">Vaasa</option>\n<option value="vahto">Vahto</option>\n<option value="valkeakoski">Valkeakoski</option>\n<option value="valkeala">Valkeala</option>\n<option value="valtimo">Valtimo</option>\n<option value="vammala">Vammala</option>\n<option value="vampula">Vampula</option>\n<option value="vantaa">Vantaa</option>\n<option value="varkaus">Varkaus</option>\n<option value="varpaisjarvi">Varpaisj\xe4rvi</option>\n<option value="vehmaa">Vehmaa</option>\n<option value="velkua">Velkua</option>\n<option value="vesanto">Vesanto</option>\n<option value="vesilahti">Vesilahti</option>\n<option value="veteli">Veteli</option>\n<option value="vierema">Vierem\xe4</option>\n<option value="vihanti">Vihanti</option>\n<option value="vihti">Vihti</option>\n<option value="viitasaari">Viitasaari</option>\n<option value="vilppula">Vilppula</option>\n<option value="vimpeli">Vimpeli</option>\n<option value="virolahti">Virolahti</option>\n<option value="virrat">Virrat</option>\n<option value="vardo">V\xe5rd\xf6</option>\n<option value="vahakyro">V\xe4h\xe4kyr\xf6</option>\n<option value="vastanfjard">V\xe4stanfj\xe4rd</option>\n<option value="voyri-maksamaa">V\xf6yri-Maksamaa</option>\n<option value="yliharma">Ylih\xe4rm\xe4</option>\n<option value="yli-ii">Yli-Ii</option>\n<option value="ylikiiminki">Ylikiiminki</option>\n<option value="ylistaro">Ylistaro</option>\n<option value="ylitornio">Ylitornio</option>\n<option value="ylivieska">Ylivieska</option>\n<option value="ylamaa">Yl\xe4maa</option>\n<option value="ylane">Yl\xe4ne</option>\n<option value="ylojarvi">Yl\xf6j\xe4rvi</option>\n<option value="ypaja">Yp\xe4j\xe4</option>\n<option value="aetsa">\xc4ets\xe4</option>\n<option value="ahtari">\xc4ht\xe4ri</option>\n<option value="aanekoski">\xc4\xe4nekoski</option>\n</select>' |
|---|
| 736 | | |
|---|
| 737 | | # FISocialSecurityNumber |
|---|
| 738 | | ############################################################## |
|---|
| 739 | | |
|---|
| 740 | | >>> from django.contrib.localflavor.fi.forms import FISocialSecurityNumber |
|---|
| 741 | | >>> f = FISocialSecurityNumber() |
|---|
| 742 | | >>> f.clean('010101-0101') |
|---|
| 743 | | u'010101-0101' |
|---|
| 744 | | >>> f.clean('010101+0101') |
|---|
| 745 | | u'010101+0101' |
|---|
| 746 | | >>> f.clean('010101A0101') |
|---|
| 747 | | u'010101A0101' |
|---|
| 748 | | >>> f.clean('101010-0102') |
|---|
| 749 | | Traceback (most recent call last): |
|---|
| 750 | | ... |
|---|
| 751 | | ValidationError: [u'Enter a valid Finnish social security number.'] |
|---|
| 752 | | >>> f.clean('10a010-0101') |
|---|
| 753 | | Traceback (most recent call last): |
|---|
| 754 | | ... |
|---|
| 755 | | ValidationError: [u'Enter a valid Finnish social security number.'] |
|---|
| 756 | | >>> f.clean('101010-0\xe401') |
|---|
| 757 | | Traceback (most recent call last): |
|---|
| 758 | | ... |
|---|
| 759 | | ValidationError: [u'Enter a valid Finnish social security number.'] |
|---|
| 760 | | >>> f.clean('101010b0101') |
|---|
| 761 | | Traceback (most recent call last): |
|---|
| 762 | | ... |
|---|
| 763 | | ValidationError: [u'Enter a valid Finnish social security number.'] |
|---|
| 764 | | >>> f.clean('') |
|---|
| 765 | | Traceback (most recent call last): |
|---|
| 766 | | ... |
|---|
| 767 | | ValidationError: [u'This field is required.'] |
|---|
| 768 | | |
|---|
| 769 | | >>> f.clean(None) |
|---|
| 770 | | Traceback (most recent call last): |
|---|
| 771 | | ... |
|---|
| 772 | | ValidationError: [u'This field is required.'] |
|---|
| 773 | | >>> f = FISocialSecurityNumber(required=False) |
|---|
| 774 | | >>> f.clean('010101-0101') |
|---|
| 775 | | u'010101-0101' |
|---|
| 776 | | >>> f.clean(None) |
|---|
| 777 | | u'' |
|---|
| 778 | | >>> f.clean('') |
|---|
| 779 | | u'' |
|---|
| 780 | | |
|---|
| 781 | | # BRZipCodeField ############################################################ |
|---|
| 782 | | >>> from django.contrib.localflavor.br.forms import BRZipCodeField |
|---|
| 783 | | >>> f = BRZipCodeField() |
|---|
| 784 | | >>> f.clean('12345-123') |
|---|
| 785 | | u'12345-123' |
|---|
| 786 | | >>> f.clean('12345_123') |
|---|
| 787 | | Traceback (most recent call last): |
|---|
| 788 | | ... |
|---|
| 789 | | ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] |
|---|
| 790 | | >>> f.clean('1234-123') |
|---|
| 791 | | Traceback (most recent call last): |
|---|
| 792 | | ... |
|---|
| 793 | | ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] |
|---|
| 794 | | >>> f.clean('abcde-abc') |
|---|
| 795 | | Traceback (most recent call last): |
|---|
| 796 | | ... |
|---|
| 797 | | ValidationError: [u'Enter a zip code in the format XXXXX-XXX.'] |
|---|
| 798 | | >>> f.clean('12345-') |
|---|
| 799 | | Traceback (most recent call last): |
|---|
| 800 | | ... |
|---|
| 801 | | Valid |
|---|