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_lengthargument, 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
TrueorFalsevalues. - 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
DateFieldwith 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_toargument 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_fieldandwidth_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
toargument is the related model, andon_deletespecifies 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
choicesargument:- Allows limiting the possible values for a field.
- It’s often used with fields like
CharFieldorIntegerField. - 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
timedeltaobject, 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 storeNULLvalues 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.
0 Comments