Difference between null and blank in Django

blank vs. null

In Django's model fields:

  • blank
    • controls the validation at the application level (Django's own input validation mechanisms)
    • tells Django that the field can be left empty in forms
  • null
    • controls the validation at the database level
    • tells the database that the field can be left empty (NULL)

Making a field optional

All fields are required by default.

Non-string-based field

To make a non-string-based field optional:

pub_time = models.TimeField(blank=True, null=True)

String-based field

To make a string-based field optional, the Django convention is to avoid using null=True:

title = models.CharField(blank=True)

Indeed, Django saves an empty string when blank=True:

Avoid using null on string-based fields such as CharField and TextField.

If a string-based field has null=True, that means it has two possible values for “no data”: NULL, and the empty string.

In most cases, it’s redundant to have two possible values for “no data;” the Django convention is to use the empty string, not NULL.

SQL queries are easier to write when there is only one possible value for "no data".

But of course, if NULL and '' represent different things in a given use case, then null=True should be used for string-based fields.

Further reading

Avant TypeScript in React Après Apprendre comment apprendre

Tag Kemar Joint