Мне нужно смоделировать почтовый адрес, который может иметь многострочный адрес, город, штат (провинцию) и почтовый индекс. страна не указана.
Мне нужно сохранить разрывы строк в уличных адресах, но по-прежнему иметь возможность искать адреса.
Я вижу два способа сделать это:
class Address(models.Model):
street = models.ForeignKey('StreetAddress')
city = models.TextField()
province = models.TextField()
code = models.TextField()<br>
class StreetAddress(models.Model):
line_number = models.IntegerField()
text = models.TextField()
или тот, который хранит адрес в одном текстовом поле, но использует специальные символы-разделители для кодирования разрывов строк:
class Address(models.Model):
street = models.TextField()
city = models.TextField()
province = models.TextField()
code = models.TextField()
как лучше всего это сделать в терминах читаемости и эффективности кода (или их сбалансированности)?
Вот как я моделирую адреса для США. Вы также можете сохранить 10-значный почтовый индекс (XXXXX-XXXX), если вам нужно.
Вы также можете подумать о добавлении точечного поля или поли-поля из geodjango в зависимости от того, для чего вы используете адреса.
from django.contrib.gis.db import models
from django.utils.translation import ugettext as _
from django.contrib.localflavor.us.models import USStateField
class UsLocation(models.Model):
address_1 = models.CharField(_("address"), max_length=128)
address_2 = models.CharField(_("address cont'd"), max_length=128, blank=True)
city = models.CharField(_("city"), max_length=64, default="Zanesville")
state = USStateField(_("state"), default="OH")
zip_code = models.CharField(_("zip code"), max_length=5, default="43701")