In Django, models are Python classes that subclass django.db.models.Model
. Each model corresponds to a database table, and the model's attributes represent the fields in that table.
Django provides a rich set of field types that can be used to define your models. Each field corresponds to a data type in the database (such as string, number, or date). Here's a detailed explanation of the most commonly used fields in Django:
1. Character Fields
CharField(max_length=None)
:- Stores a string of a specified maximum length.
- Requires the
max_length
argument, which sets the maximum number of characters allowed. - Example:
name = models.CharField(max_length=100)
TextField()
:- Stores extensive text data without a limit on its length.
- Commonly used for long-form text like descriptions or content.
- Example:
description = models.TextField()
2. Numeric Fields
IntegerField()
:- Stores integers.
- Example:
age = models.IntegerField()
FloatField()
:- Stores floating-point numbers.
- Example:
price = models.FloatField()
DecimalField(max_digits=None, decimal_places=None)
:- Stores decimal numbers with fixed precision, useful for financial or high-precision values.
- Requires two arguments:
max_digits
: Total number of digits stored.decimal_places
: Number of digits to the right of the decimal point.
- Example:
amount = models.DecimalField(max_digits=10, decimal_places=2)
PositiveIntegerField()
:- Similar to
IntegerField
, but only allows positive values. - Example:
stock_quantity = models.PositiveIntegerField()
- Similar to
3. Boolean Fields
BooleanField()
:- Stores
True
orFalse
values. - Example:
is_active = models.BooleanField()
- Stores
NullBooleanField()
:- Like
BooleanField
, but allowsTrue
,False
, orNone
(null). - Example:
approved = models.NullBooleanField()
- Like
4. Date and Time Fields
DateField(auto_now=False, auto_now_add=False)
:- Stores dates.
- Arguments:
auto_now
: Automatically set the field to the current date every time the object is saved.auto_now_add
: Automatically set the field to the current date when the object is created.
- Example:
birthdate = models.DateField()
DateTimeField(auto_now=False, auto_now_add=False)
:- Stores date and time.
- Similar to
DateField
with the same arguments. - Example:
created_at = models.DateTimeField(auto_now_add=True)
TimeField(auto_now=False, auto_now_add=False)
:- Stores time.
- Example:
time_of_day = models.TimeField()
5. File and Image Fields
FileField(upload_to=None, max_length=100)
:- Stores file paths and the actual files are saved in the file system.
- The
upload_to
argument specifies the directory where files will be uploaded. - Example:
file = models.FileField(upload_to='documents/')
ImageField(upload_to=None, height_field=None, width_field=None, max_length=100)
:- It inherits from but validates that the file uploaded is an image.
- Optionally, you can track the image’s dimensions with
height_field
andwidth_field
. - Example:
profile_picture = models.ImageField(upload_to='profiles/')
6. Relational Fields
ForeignKey(to, on_delete, related_name=None)
:- Defines a many-to-one relationship.
- The
to
argument is the related model, andon_delete
specifies what happens when the related object is deleted (e.g.,CASCADE
,SET_NULL
). - Example:
author = models.ForeignKey(User, on_delete=models.CASCADE)
OneToOneField(to, on_delete, related_name=None)
:- Defines a one-to-one relationship.
- Example:
user = models.OneToOneField(User, on_delete=models.CASCADE)
ManyToManyField(to, related_name=None)
:- Defines a many-to-many relationship, allowing an object to relate to many instances of another model.
- Example:
tags = models.ManyToManyField(Tag)
7. Choice Fields
choices
argument:- Allows limiting the possible values for a field.
- It’s often used with fields like
CharField
orIntegerField
. - Example:
STATUS_CHOICES = [ ('D', 'Draft'), ('P', 'Published'), ('A', 'Archived') ] status = models.CharField(max_length=1, choices=STATUS_CHOICES, default='D')
8. Miscellaneous Fields
EmailField()
:- Stores and validates email addresses.
- Example:
email = models.EmailField()
URLField()
:- Stores and validates URLs.
- Example:
website = models.URLField()
SlugField()
:- Stores a short label (usually for URLs). Slugs are typically used to create human-readable URLs.
- Example:
slug = models.SlugField()
UUIDField()
:- Stores universally unique identifiers (UUIDs).
- Example:
identifier = models.UUIDField()
JSONField()
:- Stores JSON-encoded data.
- Example:
metadata = models.JSONField()
BinaryField()
:- Stores raw binary data.
- Example:
file_data = models.BinaryField()
DurationField()
:- Stores a
timedelta
object, which represents a time. - Example:
duration = models.DurationField()
- Stores a
9. Auto Fields
AutoField()
:- Auto-incrementing primary key. By default, Django provides this for each model, so you rarely need to define it explicitly.
- Example:
id = models.AutoField(primary_key=True)
BigAutoField()
:- Like
AutoField
, but suitable for storing larger integers. Typically used for databases that require large IDs. - Example:
big_id = models.BigAutoField(primary_key=True)
- Like
Key Concepts:
- Field options:
null=True
: Allows the field to storeNULL
values in the database.blank=True
: Allows the field to be empty in forms.default=<value>
: Sets a default value for the field.unique=True
: Enforces uniqueness at the database level.verbose_name
: A human-readable name for the field.
Each field type in Django corresponds to an appropriate field type in the underlying database and can handle validation and constraints.