Django: Diferença entre null e blank

Django: Diferença entre null e blank
Guilherme Lima
Guilherme Lima

Compartilhe

A maneira típica de aplicativos Django interagirem com dados é através do models Django. Por exemplo, quando queremos permitir NULL em um determinado campo no banco de dados, utilizamos null=True. Já quando queremos que um campo de um formulário não seja obrigatório, utilizamos o blank=True.

Entendo o uso do null e o uso do blank

Por padrão, todos os campos do modelo Django recebem uma restrição NOT NULL no nível do banco de dados.

Para permitir que os campos do modelo Django suportem valores NULL no nível do banco de dados, declaramos a opção de campo null = True. Por exemplo:

Assim como a descrição do código, blank=True, permitimos que um determinado campo de um formulário fique em branco. Também é possível o oposto disso, com blank=False, reforçando que o determinado campo no formulário não fique em branco.

Utilizando o null e o blank ao mesmo tempo

A combinação dos dois é possível, quando queremos que um campo fique em branco no seu formulário e também permitir null no banco de dados.

Porém, como demonstrado no código abaixo, estas duas opções não fazem sentido lógico para usar:

null=True, blank=False

Se o campo não pode ficar em branco em um formulário, não existe a necessidade de permitir o null no banco de dados.

Exemplos de código

models.CharField(blank=True) 

Neste exemplo, o blank é armazenado como ''.

models.CharField(null=True)

NULL verdadeiro, mas nunca será definido como null no banco de dados. Vale lembrar que os tipos CHAR e TEXT nunca são salvos como NULL pelo Django, então null = True é desnecessário.

Casos especiais - DateTimeField

models.DateTimeField(blank=True)

Caso em branco, um erro de IntegrityError será gerado.

models.DateTimeField(null=True)

Apesar de null verdadeiro, deve ser preenchido em um formulário. Para ler a documentação oficial do Django, clique neste link.

Guilherme Lima
Guilherme Lima

Guilherme é desenvolvedor de software formado em Sistemas de Informação e possui experiência em programação usando diferentes tecnologias como Python, Javascript e Go. Criador de mais de 30 cursos de diferentes áreas da plataforma com foco no treinamento de profissionais de TI, como Data Science, Python para web com Django e Django Rest, jogos com Javascript, Infraestrutura como código com Terraform e Ansible, Orientação a Objetos com Go. Além disso, é um dos instrutores da Imersão Dev da Alura.

Veja outros artigos sobre Programação