2012-03-30 16 views
5

Tytuł mógł być mylący, ale proszę pozwolić mi wyjaśnić:Podczas zapisywania numerów telefonów w Django, należy przechowywać je jako nieprzetworzone cyfry lub użyć django.contrib.localflavor?

Obecnie, gdy przechowuję numer telefonu z nieprzetworzonymi cyframi, takimi jak 5554441234. Następnie w moim szablonie zamierzałem "sformatować" numer w coś takiego jak 555-444-1234.

Zdarzyło mi się, że w Django: localflavor, jest US phone number field, który sprawdza, czy ciąg znaków jest w formacie XXX-XXX-XXXX.

Moje pytanie brzmi: Czy powinienem podać numer telefonu jako nieprzetworzone cyfry, a następnie sformatować je w szablonie, czy też powinienem wprowadzić numer telefonu w sformatowany sposób przy użyciu lokalnego numeru?

Jeśli wybiorę to drugie, czy ograniczenie formatu XXX-XXX-XXXX będzie obowiązywać nawet do poziomu database API lub na stronie administratora Django?

Odpowiedz

9

Zapisz je jako wpisane, w razie potrzeby usuwaj tylko otaczającą białą przestrzeń. Sposób, w jaki użytkownik formatuje swój numer, przechowuje informacje semantyczne, których nie chcesz utracić, normalizując je. W Stanach Zjednoczonych format XXX-XXX-XXXX jest bardzo popularny, ale inne ustawienia regionalne używają zupełnie innych formatów. Na przykład, gdzie mieszkam niektóre popularne formaty to: XX-XXX XXX XX, XXX/XXX XX XX, +46(0)70-XXX XX XX itd. Na na na.

Numer wyświetlany dla użytkownika powinien być w tym samym formacie, co wprowadzony, w przeciwnym razie będzie on myślał o nim jako zmieszany lub może nawet nie rozpoznać numeru, jeśli jest sformatowany w innym stylu niż użytkownik jest przyzwyczajony do . Zobacz także tę dyskusję: http://discuss.fogcreek.com/dotnetquestions/default.asp?cmd=show&ixPost=6079&ixReplies=6

+0

Jak mogę sprawdzić w administratorze Django? Czy istnieje sposób na oznaczenie 'CharField' w celu wymuszenia walidacji' XXX-XXX-XXXX' na poziomie 'models.py'? – hobbes3

+3

Chodzi o to, że nie powinieneś ** nie ** próbować go egzekwować. Firmy w Twojej witrynie nie mówią użytkownikom, jak mają formatować własne numery telefonów. –

2

Jeśli używasz frameworku formularzy (na przykład w administratorze Django), sprawdzanie poprawności danych wejściowych zostanie wykonane na poziomie aplikacji. Aby wprowadzić numer telefonu w formularzu, musisz sformatować go na XXX-XXX-XXXX.

Na poziomie bazy danych jest to tylko CharField, więc baza danych nie wykonuje żadnych kontroli formatu.

+1

Jeśli chcesz potwierdzić na 'poziomie models.py' można podłączyć funkcję' sygnału pre_save' dla modelu. W tej funkcji możesz użyć 'localflavor' do sprawdzenia poprawności danych wejściowych. – gakhov