Tipos de Campos em Modelos - 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:
: Armazena dados binários.BinaryField
: Armazena valores booleanos (BooleanField
ouTrue
).False
: Permite armazenarNullBooleanField
,True
ouFalse
.Null
: Representa datas.DateField
: Representa horários.TimeField
: Representa datas e horários combinados.DateTimeField
: Representa períodos de tempo.DurationField
: Armazena inteiros incrementados automaticamente, normalmente usado como chave primária.AutoField
: Similar aoBigAutoField
, mas suporta inteiros de 64 bits.AutoField
: Similar aoSmallAutoField
, mas suporta inteiros de 16 bits.AutoField
: Representa números inteiros grandes.BigIntegerField
: Permite armazenar números decimais, com precisão definida porDecimalField
emax_digits
.decimal_places
: Representa números de ponto flutuante.FloatField
: Representa números inteiros.IntegerField
: Armazena números inteiros positivos.PositiveIntegerField
: Representa números inteiros positivos de 64 bits.PositiveBigIntegerField
: Representa números inteiros positivos de 16 bits.PositiveSmallIntegerField
: Representa números inteiros de 16 bits.SmallIntegerField
: Armazena strings com tamanho máximo definido porCharField
.max_length
: Armazena strings de comprimento indefinido.TextField
: Representa endereços de e-mail, com validação automática.EmailField
: Representa nomes de arquivos armazenados.FileField
: Representa caminhos para arquivos no sistema.FilePathField
: Representa informações sobre imagens.ImageField
: Representa endereços IP (IPv4 ou IPv6).GenericIPAddressField
: Armazena strings compostas por letras minúsculas, números, hífens e sublinhados.SlugField
: Representa URLs válidas.URLField
: Representa identificadores únicos universais (UUID).UUIDField
: Permite armazenar e manipular dados no formato JSON.JSONField
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
no Django é mapeado paraBooleanField
no PostgreSQL eboolean
no MySQL.bool
Campos numéricos como
são convertidos paraIntegerField
ou equivalentes em todos os SGBDs suportados.integer
O campo
é convertido emCharField
nos principais bancos de dados, com a quantidade de caracteres definida pelo atributovarchar
.max_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.