Tipos de Campos em Modelos no Django
No Django, os modelos representam a estrutura dos dados armazenados no banco de dados. Para definir as propriedades desses dados, diferentes tipos de campos estão disponíveis, cada um correspondendo a uma coluna específica no banco de dados.
Principais Tipos de Campos
Os tipos de campos mais comuns e suas finalidades são:
BinaryField
: Armazena dados binários.BooleanField
: Armazena valores booleanos (True
ouFalse
).NullBooleanField
: Permite armazenarTrue
,False
ouNull
.DateField
: Representa datas.TimeField
: Representa horários.DateTimeField
: Representa datas e horários combinados.DurationField
: Representa períodos de tempo.AutoField
: Armazena inteiros incrementados automaticamente, normalmente usado como chave primária.BigAutoField
: Similar aoAutoField
, mas suporta inteiros de 64 bits.SmallAutoField
: Similar aoAutoField
, mas suporta inteiros de 16 bits.BigIntegerField
: Representa números inteiros grandes.DecimalField
: Permite armazenar números decimais, com precisão definida pormax_digits
edecimal_places
.FloatField
: Representa números de ponto flutuante.IntegerField
: Representa números inteiros.PositiveIntegerField
: Armazena números inteiros positivos.PositiveBigIntegerField
: Representa números inteiros positivos de 64 bits.PositiveSmallIntegerField
: Representa números inteiros positivos de 16 bits.SmallIntegerField
: Representa números inteiros de 16 bits.CharField
: Armazena strings com tamanho máximo definido pormax_length
.TextField
: Armazena strings de comprimento indefinido.EmailField
: Representa endereços de e-mail, com validação automática.FileField
: Representa nomes de arquivos armazenados.FilePathField
: Representa caminhos para arquivos no sistema.ImageField
: Representa informações sobre imagens.GenericIPAddressField
: Representa endereços IP (IPv4 ou IPv6).SlugField
: Armazena strings compostas por letras minúsculas, números, hífens e sublinhados.URLField
: Representa URLs válidas.UUIDField
: Representa identificadores únicos universais (UUID).JSONField
: Permite armazenar e manipular dados no formato JSON.
Mapeamento de Campos para Tipos no Banco de Dados
Cada tipo de campo no Django é convertido em um tipo de coluna correspondente no banco de dados, dependendo do SGBD em uso. Por exemplo:
- O campo
BooleanField
no Django é mapeado paraboolean
no PostgreSQL ebool
no MySQL. - Campos numéricos como
IntegerField
são convertidos parainteger
ou equivalentes em todos os SGBDs suportados. - O campo
CharField
é convertido emvarchar
nos principais bancos de dados, com a quantidade de caracteres definida pelo atributomax_length
.
A tabela abaixo demonstra como alguns tipos de campos do Django são traduzidos para tipos de dados em diferentes sistemas de banco de dados:
Tipo | SQLite | MySQL | PostgreSQL | Oracle |
---|---|---|---|---|
BinaryField() | BLOB NOT NULL | longblob NOT NULL | bytea NOT NULL | BLOB NULL |
BooleanField() | bool NOT NULL | bool NOT NULL | boolean NOT NULL | NUMBER(1) NOT NULL CHECK("Valor" IN(0,1)) |
NullBooleanField() | bool NULL | bool NULL | boolean NULL | NUMBER(1) NOT NULL CHECK(("Valor" IN(0,1)) OR ("Valor" IS NULL)) |
DateField() | date NULL | date NULL | date NULL | DATE NOT NULL |
TimeField() | time NULL | time NULL | time NULL | TIMESTAMcode NOT NULL |
DateTimeField() | datetime NULL | datetime NULL | timestamcode NULL | TIMESTAMcode NOT NULL |
DurationField() | bigint NOT NULL | bigint NOT NULL | interval NOT NULL | INTERVAL DAY(9) TO SECOND(6) NOT NULL |
AutoField() | integer NOT NULL AUTOINCREMENT | integer AUTO_INCREMENT NOT NULL | serial NOT NULL | NUMBER(11) NOT NULL |
BigIntegerField | bigint NOT NULL | bigint NOT NULL | bigint NOT NULL | NUMBER(19) NOT NULL |
DecimalField(decimal_codelaces=X, max_digits=Y) | decimal NOT NULL | numeric(X, Y) NOT NULL | numeric(X, Y) NOT NULL | NUMBER(10, 3) NOT NULL |
FloatField | real NOT NULL | double coderecision NOT NULL | double coderecision NOT NULL | DOUBLE codeRECISION NOT NULL |
IntegerField | integer NOT NULL | integer NOT NULL | integer NOT NULL | NUMBER(11) NOT NULL |
codeositiveIntegerField | integer unsigned NOT NULL | integer UNSIGNED NOT NULL | integer NOT NULL CHECK ("Valor" > 0) | NUMBER NOT NULL CHECK ("Valor" > 0) |
codeositiveSmallIntegerField | smallint unsigned NOT NULL | smallint UNSIGNED NOT NULL | smallint NOT NULL CHECK ("Valor" > 0) | NUMBER(11) NOT NULL CHECK ("Valor" > 0) |
SmallIntegerField | smallint NOT NULL | smallint NOT NULL | smallint NOT NULL | NUMBER(11) NOT NULL |
CharField(max_length=N) | varchar(N) NOT NULL | varchar(N) NOT NULL | varchar(N) NOT NULL | NVARCHAR2(N) NULL |
TextField() | text NOT NULL | longtext NOT NULL | text NOT NULL | NCLOB NULL |
EmailField() | varchar(254) NOT NULL | varchar(254) NOT NULL | varchar(254) NOT NULL | NVARCHAR2(254) NULL |
FileField() | varchar(100) NOT NULL | varchar(100) NOT NULL | varchar(100) NOT NULL | NVARCHAR2(100) NULL |
FilecodeathField() | varchar(100) NOT NULL | varchar(100) NOT NULL | varchar(100) NOT NULL | NVARCHAR2(100) NULL |
ImageField() | varchar(100) NOT NULL | varchar(100) NOT NULL | varchar(100) NOT NULL | NVARCHAR2(100) NULL |
GenericIcodeAddressField() | char(39) NOT NULL | char(39) NOT NULL | inet NOT NULL | VARCHAR2(39) NULL |
SlugField() | varchar(50) NOT NULL | varchar(50) NOT NULL | varchar(50) NOT NULL | NVARCHAR2(50) NULL |
URLField() | varchar(200) NOT NULL | varchar(200) NOT NULL | varchar(200) NOT NULL | NVARCHAR2(200) NULL |
UUIDField() | char(32) NOT NULL | char(32) NOT NULL | uuid NOT NULL | VARCHAR2(32) NULL |
JSONField() | jsonb |
Essa tabela destaca a portabilidade dos modelos do Django, já que o framework ajusta automaticamente os tipos de dados para o SGBD escolhido.
Documentação oficial: