I'm trying to improve my code. I've some doubts about db_index, primary_key and unique parameters.
# -*- coding: UTF-8 -*-
from django.db import models
from django.contrib.auth.models import User
#=================================================================================#
class Country(models.Model):
country_id = models.IntegerField(primary_key=True, unique=True, verbose_name="Id", editable=False)
name = models.CharField(unique=True, db_index=True, max_length=50, verbose_name="Nome")
short_name = models.CharField(unique=True, max_length=5, verbose_name="Abreviatura")
class Meta:
verbose_name = "País"
verbose_name_plural = "Países"
ordering = ['name']
def __unicode__(self):
return self.name
#=================================================================================#
class State(models.Model):
state_id = models.IntegerField(primary_key=True, unique=True, verbose_name="Id", editable=False)
state = models.CharField(unique=True, db_index=True, max_length=2, verbose_name="Sigla")
name = models.CharField(unique=True, db_index=True, max_length=20, verbose_name="Nome")
region = models.CharField(max_length=20, verbose_name="Região")
country = models.ForeignKey(Country, verbose_name="País")
class Meta:
verbose_name = "Estado"
verbose_name_plural = "Estados"
ordering = ['name']
def __unicode__(self):
return self.name
#=================================================================================#
class City(models.Model):
city_id = models.IntegerField(primary_key=True, unique=True, editable=False) # id baseado no IBGE
name = models.CharField(db_index=True, max_length=150, verbose_name="Nome") # db_index para otimizar desempenho
short_name = models.CharField(max_length=150, blank=True, null=True, verbose_name="Slug")
state = models.ForeignKey(State, verbose_name="Estado")
class Meta:
verbose_name = "Cidade"
verbose_name_plural = "Cidades"
ordering = ['name']
def __unicode__(self):
return ('%s - %s') % (self.name, self.state.state)
#=================================================================================#
class Phone(models.Model):
PHONES_TYPE_CHOICES = (
('R', u'Residencial'),
('M', u'Celular'),
('C', u'Comercial'),
)
user = models.ForeignKey(User, verbose_name='Usuário')
type = models.CharField(max_length=1, choices=PHONES_TYPE_CHOICES, verbose_name='Tipo')
number = models.CharField('Número', max_length=15)
class Meta:
verbose_name = "Telefone"
verbose_name_plural = "Telefones"
def __unicode__(self):
return self.number
#=================================================================================#
class Address(models.Model):
STREETS_TYPE_CHOICES = (
('R', 'Rua'),
('A', 'Avenida'),
('T', 'Travessa'),
('E', 'Estrada'),
('R', 'Rodovia'),
('Q', 'Quadra'),
('B', 'Bloco'),
)
user = models.ForeignKey(User, verbose_name='Usuário')
street_type = models.CharField(max_length=1, choices=STREETS_TYPE_CHOICES, verbose_name='Logradouro')
street = models.CharField('Endereço', max_length=100)
number = models.IntegerField(verbose_name='Número')
complement = models.CharField(max_length=45, blank=True, verbose_name='Complemento')
neighborhood = models.CharField('Bairro', max_length=100)
state = models.ForeignKey(State, verbose_name="Estado")
city = models.ForeignKey(City, verbose_name="Cidade")
country = models.ForeignKey(Country, verbose_name="País")
zip_code = models.CharField('CEP', max_length=10)
class Meta:
verbose_name = "Endereço"
verbose_name_plural = "Endereços"
def __unicode__(self):
return ("%s, %s") % (self.city, self.state)
#=================================================================================#