Model Fields

Loading concept...

Django Model Fields: The Building Blocks of Your Data Castle 🏰

Imagine you’re building a massive LEGO castle. Each LEGO brick has a specific shape and purpose—some are flat, some are tall, some are round. Django Model Fields are exactly like LEGO bricks for your database! Each field type holds a specific kind of information, and when you put them together, you create something amazing.


The Big Picture: What Are Model Fields?

Think of a Model as a form you fill out—like a registration form at school. Each blank space on that form is a Field. Some spaces want your name (text), some want your age (number), some want your birthday (date), and some want a photo (file).

Django gives you special field types so your database knows exactly what kind of information to expect and how to store it safely.

graph TD A[Django Model] --> B[Text Fields] A --> C[Numeric Fields] A --> D[Boolean Fields] A --> E[Date/Time Fields] A --> F[File Fields] A --> G[Specialized Fields]

📝 Text Model Fields

The Storytellers — These fields hold words, sentences, and stories!

CharField — Short Text Box

Like a name tag that has limited space. Perfect for names, titles, and short labels.

from django.db import models

class Student(models.Model):
    # max_length is REQUIRED
    first_name = models.CharField(
        max_length=50
    )
    nickname = models.CharField(
        max_length=20,
        blank=True  # Can be empty
    )

Key Point: You MUST tell Django the max_length. It’s like saying “this name tag can fit 50 letters max.”


TextField — Big Notepad

Like a diary page—write as much as you want! Perfect for descriptions, blog posts, and long notes.

class BlogPost(models.Model):
    title = models.CharField(max_length=200)
    # No max_length needed!
    content = models.TextField()
    summary = models.TextField(
        blank=True,
        default=""
    )

When to use what?

  • CharField → Short stuff (names, titles, codes)
  • TextField → Long stuff (stories, descriptions, essays)

EmailField — Email Checker

Like a smart mailbox that only accepts real email addresses!

class User(models.Model):
    email = models.EmailField(
        max_length=254,  # Email standard
        unique=True      # No duplicates!
    )

Django automatically checks if it looks like a real email (has @ and .).


URLField — Web Address Keeper

Stores website links and makes sure they look like real URLs.

class Website(models.Model):
    name = models.CharField(max_length=100)
    link = models.URLField(
        max_length=200
    )

SlugField — URL-Friendly Names

Converts “My Cool Blog Post” into my-cool-blog-post for pretty URLs!

class Article(models.Model):
    title = models.CharField(max_length=200)
    # Only letters, numbers,
    # underscores, hyphens
    slug = models.SlugField(
        max_length=200,
        unique=True
    )

🔢 Numeric Model Fields

The Counters — These fields love numbers!

IntegerField — Whole Numbers

Counts things without decimals. Like counting apples—you can’t have 3.5 apples!

class Product(models.Model):
    name = models.CharField(max_length=100)
    # Whole numbers only
    quantity = models.IntegerField(
        default=0
    )
    # Range: -2147483648 to 2147483647

PositiveIntegerField — Happy Numbers Only

Only accepts 0 and above. No negative numbers allowed!

class Score(models.Model):
    player = models.CharField(max_length=50)
    # Only 0 or positive
    points = models.PositiveIntegerField(
        default=0
    )

SmallIntegerField — Tiny Counter

For smaller numbers (saves space). Range: -32768 to 32767.

class Rating(models.Model):
    # Perfect for 1-5 stars
    stars = models.SmallIntegerField()

BigIntegerField — Giant Numbers

For HUGE numbers like counting stars in the sky!

class Analytics(models.Model):
    # For very large counts
    page_views = models.BigIntegerField(
        default=0
    )
    # Range: up to 9 quintillion!

FloatField — Decimal Numbers

For numbers with decimal points, like temperature or percentages.

class Weather(models.Model):
    city = models.CharField(max_length=100)
    # 98.6, 72.5, etc.
    temperature = models.FloatField()

Warning: FloatField can have tiny rounding errors (like 0.1 + 0.2 = 0.30000000004). For money, use DecimalField!


DecimalField — Precise Money Counter

Perfect for money! No rounding surprises.

class Product(models.Model):
    name = models.CharField(max_length=100)
    # Exactly 2 decimal places
    price = models.DecimalField(
        max_digits=10,    # Total digits
        decimal_places=2  # After the dot
    )
    # Example: 99999999.99

✅ Boolean Model Fields

The Yes/No Deciders — Simple true or false!

BooleanField — True or False

Like a light switch—ON or OFF, nothing in between.

class Task(models.Model):
    title = models.CharField(max_length=200)
    # True or False only
    is_completed = models.BooleanField(
        default=False
    )
    is_urgent = models.BooleanField(
        default=False
    )

NullBooleanField (Deprecated)

Old way to allow True, False, or Unknown. Now use:

class Survey(models.Model):
    question = models.CharField(max_length=200)
    # Modern way: True, False, or NULL
    response = models.BooleanField(
        null=True,
        blank=True
    )

📅 Date and Time Model Fields

The Time Keepers — Track when things happen!

DateField — Calendar Date

Stores just the date (no clock time).

class Person(models.Model):
    name = models.CharField(max_length=100)
    # Just year-month-day
    birthday = models.DateField()

    # Auto-set when created
    joined_date = models.DateField(
        auto_now_add=True
    )

TimeField — Clock Time

Stores just the time (no calendar date).

class Alarm(models.Model):
    name = models.CharField(max_length=50)
    # Just hours:minutes:seconds
    wake_time = models.TimeField()

DateTimeField — Full Timestamp

Stores BOTH date AND time together!

class Event(models.Model):
    title = models.CharField(max_length=200)

    # Full timestamp
    start_time = models.DateTimeField()

    # Auto-set on creation
    created_at = models.DateTimeField(
        auto_now_add=True
    )

    # Auto-update on save
    updated_at = models.DateTimeField(
        auto_now=True
    )

Magic Options:

  • auto_now_add=True → Set once when created
  • auto_now=True → Update every time you save

DurationField — Time Spans

How long something takes—like a movie length!

from datetime import timedelta

class Video(models.Model):
    title = models.CharField(max_length=200)
    # Stores: days, hours, minutes, seconds
    length = models.DurationField()

# Usage:
# video.length = timedelta(hours=2, minutes=30)

📁 File Model Fields

The File Cabinets — Store documents and images!

FileField — Any File

Upload any type of file—PDFs, documents, spreadsheets.

class Document(models.Model):
    title = models.CharField(max_length=200)
    # upload_to = folder name
    file = models.FileField(
        upload_to='documents/'
    )

ImageField — Pictures Only

Special FileField that checks if it’s really an image!

class Profile(models.Model):
    user = models.CharField(max_length=100)
    # Only accepts image files
    avatar = models.ImageField(
        upload_to='avatars/',
        blank=True
    )

Requires: pip install Pillow (image library)


FilePathField — Pick from Server

Choose from files already on the server.

class Template(models.Model):
    name = models.CharField(max_length=100)
    # Only shows .html files
    file = models.FilePathField(
        path='/templates/',
        match='.*\.html#x27;
    )

🎯 Specialized Model Fields

The Specialists — Unique jobs, unique tools!

UUIDField — Universal Unique ID

Creates super-unique IDs that are impossible to guess.

import uuid

class Order(models.Model):
    # Globally unique identifier
    id = models.UUIDField(
        primary_key=True,
        default=uuid.uuid4,
        editable=False
    )
    items = models.TextField()

Example: 550e8400-e29b-41d4-a716-446655440000


GenericIPAddressField — IP Addresses

Stores internet addresses (IPv4 and IPv6).

class Visitor(models.Model):
    # Stores IP addresses
    ip_address = models.GenericIPAddressField()
    visited_at = models.DateTimeField(
        auto_now_add=True
    )

JSONField — Flexible Data Storage

Store complex data structures—lists, dictionaries, nested data!

class Settings(models.Model):
    user = models.CharField(max_length=100)
    # Store any JSON data
    preferences = models.JSONField(
        default=dict
    )

# Usage:
# settings.preferences = {
#     "theme": "dark",
#     "notifications": True,
#     "languages": ["en", "es"]
# }

BinaryField — Raw Binary Data

Stores raw bytes—like a secret vault for binary data.

class SecureData(models.Model):
    name = models.CharField(max_length=100)
    # Raw binary storage
    encrypted_data = models.BinaryField()

Warning: Don’t store large files here—use FileField instead!


🎨 Quick Reference Chart

graph TD subgraph Text A1[CharField] --> A2[Short text] A3[TextField] --> A4[Long text] A5[EmailField] --> A6[Emails] A7[URLField] --> A8[Web links] A9[SlugField] --> A10[URL slugs] end subgraph Numbers B1[IntegerField] --> B2[Whole nums] B3[FloatField] --> B4[Decimals] B5[DecimalField] --> B6[Money] end subgraph Dates C1[DateField] --> C2[Just date] C3[TimeField] --> C4[Just time] C5[DateTimeField] --> C6[Both] end

🚀 Pro Tips to Remember

  1. CharField needs max_length — Always tell Django the limit!

  2. Money = DecimalField — Never use FloatField for currency.

  3. Use auto_now wisely:

    • auto_now_add = Set once at creation
    • auto_now = Update every save
  4. ImageField needs Pillow — Install with pip install Pillow

  5. JSONField is your friend — Perfect for flexible, changing data.


🎯 You Did It!

You now understand all the building blocks to create any database structure in Django! Each field type is a specialist—pick the right one for the job, and your data will be safe, organized, and easy to work with.

Remember: Building a database is like building with LEGOs. Start with the right bricks, follow the instructions, and you’ll create something amazing! 🏆

Loading story...

No Story Available

This concept doesn't have a story yet.

Story Preview

Story - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

Interactive Preview

Interactive - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

No Interactive Content

This concept doesn't have interactive content yet.

Cheatsheet Preview

Cheatsheet - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

No Cheatsheet Available

This concept doesn't have a cheatsheet yet.

Quiz Preview

Quiz - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

No Quiz Available

This concept doesn't have a quiz yet.