Data type Django model type SQLite MySQL PostgreSQL Oracle Description
Binary models.BinaryField() BLOB NOT NULL longblob NOT NULL bytea NOT NULL BLOB NULL Creates a blob field to store binary data (e.g. images, audio or other multimedia objects)
Boolean models.BooleanField() bool NOT NULL bool NOT NULL boolean NOT NULL NUMBER(1) NOT NULL CHECK ("VAR" IN (0,1)) Creates a boolean field to store True/False (or 0/1) values
Boolean models.NullBooleanField() bool NULL bool NULL boolean NULL NUMBER(1) NULL CHECK (("VAR" IN (0,1)) OR ("VAR" IS NULL)) Works just like BooleanField but also allows NULL values
Date/time models.DateField() date NOT NULL date NOT NULL date NOT NULL DATE NOT NULL Creates a date field to store dates
Date/time models.TimeField() time NOT NULL time NOT NULL time NOT NULL TIMESTAMP NOT NULL Creates a time field to store times.
Date/time models.DateTimeField() datetime NOT NULL datetime NOT NULL timestamp with time zone NOT NULL TIMESTAMP NOT NULL Creates a datetime field to store dates with times
Date/time models.DurationField() bigint NOT NULL bigint NOT NULL interval NOT NULL INTERVAL DAY(9) TO SECOND(6) NOT NULL Creates a field to store periods of time.
Number models.AutoField() integer NOT NULL AUTOINCREMENT integer AUTO_INCREMENT NOT NULL serial NOT NULL NUMBER(11) NOT NULL & also creates a SEQUENCE and TRIGGER to increase the field Creates an integer that autoincrements, primarly used for custom primary keys
Number models.BigIntegerField() bigint NOT NULL bigint NOT NULL bigint NOT NULL NUMBER(19) NOT NULL Create a big integer to fit numbers between -9223372036854775808 to 9223372036854775807. This range may vary depending on the DB brand
Number models.DecimalField
(
decimal_places=X,max_digits=Y)
decimal NOT NULL numeric(X, Y) NOT NULL numeric(X, Y) NOT NULL NUMBER(10, 3) NOT NULL Enforces a number have a maximum X digits and Y decimal points Creates a decimal field to store decimal numbers. Note both X and Y arguments are required, where the X argument represents the maximum number of digits to store and the Y argument represents the number of decimal places to store.
Number models.FloatField() real NOT NULL double precision NOT NULL double precision NOT NULL DOUBLE PRECISION NOT NULL Creates a column to store floating-point numbers.
Number models.IntegerField() integer NOT NULL integer NOT NULL integer NOT NULL NUMBER(11) NOT NULL Creates a column to store integer numbers.
Number models.PositiveIntegerField() integer unsigned NOT NULL integer UNSIGNED NOT NULL integer NOT NULL CHECK ("VAR" >= 0) NUMBER(11) NOT NULL CHECK ("VAR" >= 0) Enforces values from 0 to 2147483647 Works just like IntegerField but limits values to positive numbers
Number models.PositiveSmallIntegerField() smallint unsigned NOT NULL smallint UNSIGNED NOT NULL smallint NOT NULL CHECK ("VAR" >= 0) NUMBER(11) NOT NULL CHECK ("VAR" >= 0) Enforces values from 0 to 32767 Works just like IntegerField and the specialized PositiveIntegerField but limits numbers to a smaller positive range.
Number options.SmallIntegerField() smallint NOT NULL smallint NOT NULL smallint NOT NULL NUMBER(11) NOT NULL Enforces a number is in the range from -32768 to 32767 Works just like IntegerField but in a smaller integer range.
Text models.CharField(max_length=N) varchar(N) NOT NULL varchar(50) NOT NULL varchar(50) NOT NULL NVARCHAR2(50) NULL Creates a text column, where the max_length argument is required to specify the maximum length in characters.
Text models.TextField() text NOT NULL longtext NOT NULL text NOT NULL NCLOB NULL Creates a text field to store text.
Text (Specialized) models.CommaSeparatedIntegerField
(
max_length=50)
varchar(N) NOT NULL varchar(N) NOT NULL varchar(N) NOT NULL NVARCHAR2(N) NULL Enforces the string a CSV of integers.Works just like CharField except Django enforces the string be a comma separated value of integers prior to interacting with the database (e.g. 3,54,54,664,65)
Text (Specialized) models.EmailField() varchar(254) NOT NULL varchar(254) NOT NULL varchar(254) NOT NULL NVARCHAR2(254) NULL Enforces the text is a valid email with the internal Django EmailValidator to determine what is and isn't a valid. Works just like CharField defaulting to a max_length of 254 characters and also enforces the string is a valid email.
Text (Specialized) models.FileField() varchar(100) NOT NULL varchar(100) NOT NULL varchar(100) NOT NULL NVARCHAR2(100) NULL Enforces and provides various utilities to handle files (e.g. opening/closing file, upload location,etc). Works just like CharField defaulting to a max_length of 100 characters and also enforces the string is a valid file.
Text (Specialized) models.FilePathField() varchar(100) NOT NULL varchar(100) NOT NULL varchar(100) NOT NULL NVARCHAR2(100) NULL Enforces and provides various utilities to limit choices of filenames in certain filesystem directories. Works just like CharField defaulting to a max_length of 100 characters and also enforces the string is a valid file in a filesystem directory.
Text (Specialized) models.ImageField() varchar(100) NOT NULL varchar(100) NOT NULL varchar(100) NOT NULL NVARCHAR2(100) NULL Enforces and provides various utilities to handle image files (e.g. getting the height & width) Works just like CharField and the specialized FileField defaulting to a max_length of 100 characters and also enforces the string is a valid image. Note this field requires the presence of the Pillow Python library (e.g. pip install Pillow).
Text (Specialized) models.GenericIPAddressField() char(39) NOT NULL char(39) NOT NULL inet NOT NULL VARCHAR2(39) NULL Enforces and provides various utilities to only accept valid IPv4 or IPv6 addresses (e.g. 198.10.22.64 and FE80::0202:B3FF:FE1E:8329, as well as utilities like unpack_ipv4 and protocol) Works just like CharField defaulting to a max_length of 39 characters and enforces the string is a valid IP address.
Text (Specialized) models.SlugField() varchar(50) NOT NULL varchar(50) NOT NULL varchar(50) NOT NULL NVARCHAR2(50) NULL Enforces a string is a slug string, which is a string that only contains letters, numbers, underscores or hyphens. Works just like CharField defaulting to a max_length of 50 characters and ensure the provided string is a slug -- a concept that's typically used to cleanse URL strings that contains spaces and other potentially invalid character like letter with accents.
Text (Specialized) models.URLField() varchar(200) NOT NULL varchar(200) NOT NULL varchar(200) NOT NULL NVARCHAR2(200) NULL Enforces the provided text value is a valid URL Works just like CharField defaulting to a max_length of 200 characters and enforces the string is a valid URL
Text (Specialized) models.UUIDField() char(32) NOT NULL char(32) NOT NULL uuid NOT NULL VARCHAR2(32) NOT NULL Enforces the provided text is a Universally unique identifiers (UUID) Works just like CharField defaulting to a max_length of 32 characters and enforces the value is a UUID.