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 (TrueouFalse).NullBooleanField: Permite armazenarTrue,FalseouNull.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_digitsedecimal_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
BooleanFieldno Django é mapeado parabooleanno PostgreSQL eboolno MySQL. - Campos numéricos como
IntegerFieldsão convertidos paraintegerou equivalentes em todos os SGBDs suportados. - O campo
CharFieldé convertido emvarcharnos 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: