Django: Diferença entre null e blank
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.