A parte mais importante de um modelo e a única parte necessária de um modelo é a lista de campos do banco de dados que ele define. Os campos são especificados por atributos de classe. Tenha cuidado para não escolher nomes de campo que entrem em conflito com a API de modelos, como limpar, salvar ou excluir.

Exemplo:

de modelos de importação django.db
classe Musician (models.Model):
    first_name = models.CharField (max_length = 200)
    last_name = models.CharField (max_length = 200)
    instrument = models.CharField (max_length = 200)
class Album (models.Model):
    artist = models.ForeignKey (Musician, on_delete = models.CASCADE)
    name = models.CharField (max_length = 100)
    release_date = models.DateField()
    num_stars = models.IntegerField()

Definir um campo para armazenar qualquer tipo de dados é como decidir um tipo de dados em C / C ++ para armazenar um inteiro particular, char, etc. Os campos no Django são os tipos de dados para armazenar um tipo particular de dados. Por exemplo, para armazenar um inteiro, IntegerField seria usado. Esses campos têm validação embutida para um tipo de dado específico, ou seja, você não pode armazenar “abc” em um IntegerField. Da mesma forma, para outros campos. Este post gira em torno dos principais campos que podem ser usados ​​nos Modelos Django.
Aqui estão alguns atributos-chave que você deve conhecer antes de começar a usar o Django Fields.

Tipos de campo

Cada campo no modelo deve ser uma instância da classe Field apropriada. Django usa tipos de classe de campo para determinar algumas coisas:

  • O tipo de coluna, que informa ao banco de dados que tipo de dados armazenar (por exemplo, INTEGER, VARCHAR, TEXT).
  • O widget HTML padrão a ser usado ao renderizar um campo de formulário (por exemplo, <input type = ”text”>, <select>).
  • Os requisitos mínimos de validação, usados ​​na administração do Django e em formulários gerados automaticamente.

O Django vem com dezenas de tipos de campos embutidos que podem ser usados ​​para salvar qualquer tipo de dados, desde números até arquivos HTML inteiros também. Aqui está uma lista de todos os tipos de campo usados ​​no Django.



Tipos de dados de modelo básico e lista de campos

Nome do Campo Descrição
AutoField É um IntegerField que aumenta automaticamente.
BigAutoField É um número inteiro de 64 bits, muito parecido com um AutoField, exceto que é garantido para ajustar números de 1 a 9223372036854775807.
BigIntegerField É um número inteiro de 64 bits, muito parecido com um IntegerField, exceto que é garantido para ajustar números de -9223372036854775808 a 9223372036854775807.
BinaryField Um campo para armazenar dados binários brutos.
BooleanField Um campo verdadeiro / falso.
O widget de formulário padrão para este campo é um CheckboxInput.
CharField É uma data, representada em Python por uma instância datetime.date.
DateField Uma data, representada em Python por uma instância datetime.date
É usado para data e hora, representado em Python por uma instância datetime.datetime.
DecimalField É um número decimal de precisão fixa, representado em Python por uma instância decimal.
DurationField Um campo para armazenar períodos de tempo.
EmailField É um CharField que verifica se o valor é um endereço de e-mail válido.
FileField É um campo de upload de arquivo.
FloatField É um número de ponto flutuante representado em Python por uma instância float.
ImageField Ele herda todos os atributos e métodos de FileField, mas também valida se o objeto carregado é uma imagem válida.
IntegerField É um campo inteiro. Valores de -2147483648 a 2147483647 são seguros em todos os bancos de dados suportados pelo Django.
GenericIPAddressField Um endereço IPv4 ou IPv6, em formato de string (por exemplo, 192.0.2.30 ou 2a02: 42fe :: 4).
NullBooleanField Como um BooleanField, mas permite NULL como uma das opções.
PositiveIntegerField Como um IntegerField, mas deve ser positivo ou zero (0).
PositiveSmallIntegerField Como um PositiveIntegerField, mas só permite valores sob um determinado ponto (dependente do banco de dados).
SlugField Lesma é um termo jornalístico. Um slug é um rótulo curto para algo, contendo apenas letras, números, sublinhados ou hifens. Eles geralmente são usados ​​em URLs.
SmallIntegerField É como um IntegerField, mas só permite valores em um determinado ponto (dependente do banco de dados).
Campo de texto Um grande campo de texto. O widget de formulário padrão para este campo é Textarea.
TimeField Uma hora, representada em Python por uma instância datetime.time.
URLField Um CharField para um URL, validado por URLValidator.
UUIDField Um campo para armazenar identificadores exclusivos universalmente. Usa a classe UUID do Python. Quando usado no PostgreSQL, ele armazena em um tipo de dados uuid, caso contrário, em um char (32).

Campos de Relacionamento

Django também define um conjunto de campos que representam relações.

Nome do Campo Descrição
ForeignKey Um relacionamento muitos para um. Requer dois argumentos posicionais: a classe à qual o modelo está relacionado e a opção on_delete.
ManyToManyField Um relacionamento de muitos para muitos. Requer um argumento posicional: a classe à qual o modelo está relacionado, que funciona exatamente da mesma forma que para ForeignKey, incluindo relacionamentos recursivos e preguiçosos.
OneToOneField Um relacionamento um para um. Conceitualmente, é semelhante a uma ForeignKey com unique = True, mas o lado “reverso” da relação retornará diretamente um único objeto.