2012-03-30 6 views
5

Der Titel möglicherweise verwirrend, aber bitte lassen Sie mich erklären:Wenn ich Telefonnummern in Django speichere, sollte ich sie als rohe Ziffern speichern oder django.contrib.localflavor verwenden?

Derzeit, wenn ich Telefonnummer mit rohen Ziffern wie 5554441234 speichern. Dann würde ich in meiner Vorlage die Nummer in etwas wie 555-444-1234 "formatieren".

Ich erkannte in Django localflavor, gibt es eine US phone number field, die überprüft, ob eine Zeichenfolge im Format XXX-XXX-XXXX ist.

Also meine Frage ist sollte ich die Telefonnummer als rohe Ziffern eingeben, dann formatieren Sie es in der Vorlage, oder sollte ich die Telefonnummer in der formatierten Weise mit Localflavor eingeben?

Wenn ich das letztere wähle, würde die XXX-XXX-XXXX Formatbeschränkung sogar auf die database API Ebene oder auf der Django Adminseite gelten?

Antwort

9

Speichern Sie sie wie eingegeben, streifen Sie bei Bedarf nur den umgebenden Leerraum ab. Die Art, wie ein Benutzer seine Nummer formatiert, speichert semantische Informationen, die Sie nicht verlieren wollen, indem Sie sie normalisieren. In den USA ist das Format XXX-XXX-XXXX sehr verbreitet, andere Länder verwenden jedoch völlig unterschiedliche Formate. Zum Beispiel, wo ich lebe einige gängige Formate sind: XX-XXX XXX XX, XXX/XXX XX XX, +46(0)70-XXX XX XX und so weiter ad nausem.

Die Nummer, die dem Benutzer angezeigt wird, sollte das gleiche Format haben wie eingegeben, sonst wird er oder sie es als Munged betrachten oder die Nummer nicht einmal erkennen, wenn es in einem anderen Stil formatiert ist, als der Benutzer es gewohnt ist . Siehe auch diese Diskussion: http://discuss.fogcreek.com/dotnetquestions/default.asp?cmd=show&ixPost=6079&ixReplies=6

+0

Wie würde ich den Django-Administrator einchecken? Gibt es eine Möglichkeit, das "CharField" zu markieren, um die 'XXX-XXX-XXXX'-Validierung auf einer' models.py'-Ebene durchzusetzen? – hobbes3

+3

Der Punkt ist, dass Sie ** nicht ** versuchen sollten, es durchzusetzen. Es ist nicht Ihre Aufgabe, den Benutzern mitzuteilen, wie sie ihre eigenen Telefonnummern formatieren sollen. –

2

Wenn Sie das Forms-Framework verwenden (z. B. im Django-Admin), wird die Validierung der Eingabe auf Anwendungsebene durchgeführt. Um die Telefonnummer im Formular einzugeben, müssen Sie sie in XXX-XXX-XXXX formatieren.

Auf Datenbankebene ist es nur ein CharField, so dass die Datenbank keine Prüfungen für das Format durchführt.

+1

installieren Wenn Sie auf 'models.py' Ebene überprüfen möchten, können Sie Ihre Funktion' pre_save' Signal für das Modell befestigen. In dieser Funktion können Sie 'localflavor' verwenden, um die Eingabe zu validieren. – gakhov

Verwandte Themen