comment modéliser une adresse postale
J'ai besoin de modéliser une adresse postale qui peut avoir plusieurs lignes de l'adresse de la rue, la ville, l'état (province), et le code postal. le pays est omis.
J'ai besoin de conserver les sauts de ligne dans la rue adresses, mais encore être en mesure de rechercher les adresses.
Je vois deux façons de le faire:
class Address(models.Model):
street = models.ForeignKey('StreetAddress')
city = models.TextField()
province = models.TextField()
code = models.TextField()
class StreetAddress(models.Model):
line_number = models.IntegerField()
text = models.TextField()
ou bien celle-ci qui stocke l'adresse de la rue dans un champ de texte unique, mais qui utilise des caractères de séparation spéciaux pour coder les sauts de ligne:
class Address(models.Model): street = models.TextField() city = models.TextField() province = models.TextField() code = models.TextField()
quelle est la meilleure façon de le faire en termes de lisibilité du code et de l'efficacité (ou de leur solde)?
OriginalL'auteur akonsu | 2011-10-08
Vous devez vous connecter pour publier un commentaire.
Que si la majorité de vos adresses multi-ligne de la rue de pièces (et de faire beaucoup de lignes), j'irais pour le dernier, le stockage de l'ensemble dans un seul domaine, et de ne pas s'embêter avec un modèle supplémentaire. Si la plupart de vos adresses de plusieurs lignes ne sont que deux lignes, de considérer la création d'une rue et street2 champ votre Adresse de modèle (vous pouvez choisir des noms plus descriptifs de ces deux "rue" champs). La première serait de stocker la première rue à la ligne, et le deuxième champ de stocker toutes les lignes supplémentaires (séparés par des sauts de ligne). Je pense que lors de la recherche d'adresses, vous feriez plus souvent à la recherche sur la ligne d'adresse qui contient le numéro de la rue, alors peut-être dans la logique du programme vous feriez en sorte que le numéro de la rue de la ligne a toujours été stockée dans le premier "rue" le terrain, vous pouvez alors ajouter un index sur dans votre base de données.
D'autre part, si la plupart de vos adresses multi-ligne de la rue des pièces de, et de disposer de plus de deux lignes, alors il est logique de créer ce deuxième modèle.
Si vous ne savez pas à l'avance, et ne pas l'esprit potentiellement "migration" dans le futur, optez pour le modèle simple. Sinon, optez pour votre deux-conception du modèle.
OriginalL'auteur imm
Voici comment j'modèle adresses pour les états-unis. Vous pouvez également stocker les 10 chiffres du code postal (XXXXX-XXXX) si vous avez besoin d'.
Vous pouvez également envisager d'ajouter un point de champ, ou un poly champ de geodjango en fonction de ce que vous êtes en utilisant les adresses pour.
pip install django_localflavor_us
et l'importation USStateField comme suit:from django_localflavor_us.models import USStateField
.Comment pourrions-nous le modèle de n'importe quelle adresse en général et non pas seulement une adresse aux etats-unis?
Les conseils de @Altaisoft a donné est plus à jour. À partir de ce pypi page: "Avertissement: ces paquets, Vous ne devriez pas l'utiliser plus longtemps. L'ancien django.contrib.localflavor paquet est maintenant disponible en tant que pypi.python.org/pypi/django-localflavor ensemble, y compris les états-UNIS localflavor." Donc, l'équivalent est maintenant
pip install django-localflavor
&from localflavor.models import USStateField
OriginalL'auteur Issac Kelly
J'ai quelques questions à propos de vos données d'adresse:
La plupart des adresses de livraison n'ont qu'une seule ligne. Beaucoup de gens à tort place de l'information secondaire (numéro d'unité) sur la deuxième ligne de livraison. Cela va à l'encontre USPS normes (voir USPS publication 28). Donc, je recommande que vous obtenez votre adresse de données vérifiée à l'aide d'un CASS-Certifié vendeur de sorte que vous savez que les adresses que vous faites affaire avec sont réels et standardisée. Ensuite, vous sera probablement dans une meilleure position pour analyser vos données et de rendre une décision sur la façon de les stocker. Ma conjecture est qu'après avoir effectué la vérification de l'adresse sur votre base de données, vous n'aurez pas très nombreux (le cas échéant) adresse auprès de plus d'une seule ligne de livraison. Vous devez décider à ce moment si ça vaut le coup d'avoir un champ distinct pour elle, ou de les garder dans un seul champ est délimité par un saut de ligne.
Divulgation complète: je suis un développeur de logiciels pour SmartyStreets, une vérification de l'adresse de l'entreprise et CASS Certifié vendeur.
OriginalL'auteur mdwhatcott