The main difference between null=True and blank=true is that null=True
controls whether a field can store a NULL
value in the database whereas blank=True
controls whether a field can be left blank during form validation.
In Django, null=True and blank=True are field options that can be used for model fields, but they serve different purposes:
null=True
This option allows a field to store a NULL value in the database. When you set null=True for a field, it means that the field is allowed to have no value or an empty value at the database level. This option is most relevant for fields with a default value of NOT NULL, such as ForeignKey, OneToOneField, DateTimeField, etc.
Example
class Book(models.Model):
title = models.CharField(max_length=100)
publication_date = models.DateField(null=True)
The publication_date field can have a NULL value in the database, meaning a book can be saved without a publication date.
blank=True
This option allows a field to be left blank in forms, such as the Django admin or any other form you might use for user input. When you set a blank=True
, it can be empty at the form validation level. If this option is not set, the field will be required, and submitting a form with an empty value for that field will result in a validation error.
Example
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100, blank=True)
Here, the author field can be left blank in a form, meaning a book can be saved without an author being specified.
You can use these options independently or together, depending on your requirements. For example, if you want a field to be optional both in the database and in forms, you can set both null=True
and blank=True
.

Hemang is an expert Python developer who completed his bachelor’s degree from VIT Bhopal.