📖 Scenario: You are building a simple Django app to manage a library's book collection. Each book has a title, an author, and a number of pages.
🎯 Goal: Create a Django model called Book with fields for title, author, and pages.
📋 What You'll Learn
Create a Django model class named Book
Add a title field as a character field with max length 100
Add an author field as a character field with max length 50
Add a pages field as an integer field
💡 Why This Matters
🌍 Real World
Django models are used to define the structure of data in web applications, like books in a library system.
💼 Career
Understanding Django models is essential for backend web development jobs using Django framework.
Progress0 / 4 steps
1
Create the Book model class
Create a Django model class called Book that inherits from models.Model.
Django
Hint
Use class Book(models.Model): to start your model.
2
Add the title field
Inside the Book model, add a field called title using models.CharField with max_length=100.
Django
Hint
Use title = models.CharField(max_length=100) inside the class.
3
Add the author and pages fields
Add two more fields inside the Book model: author as a CharField with max_length=50, and pages as an IntegerField.
Django
Hint
Use author = models.CharField(max_length=50) and pages = models.IntegerField().
4
Add string representation method
Add a __str__ method to the Book model that returns the title field.
Django
Hint
Define def __str__(self): and return self.title.
Practice
(1/5)
1. What is the purpose of defining fields in a Django model?
easy
A. To create views for the web application
B. To specify the type of data each column will store in the database
C. To write HTML templates for the frontend
D. To handle user authentication automatically
Solution
Step 1: Understand Django model fields
Fields in a Django model define what kind of data each column in the database will hold, such as text, numbers, or dates.
Step 2: Differentiate from other components
Views handle logic, templates handle display, and authentication is separate; fields specifically define data structure.
Final Answer:
To specify the type of data each column will store in the database -> Option B
Quick Check:
Model fields = Data columns [OK]
Hint: Fields define data types in models, not views or templates [OK]
Common Mistakes:
Confusing fields with views or templates
Thinking fields handle user login
Assuming fields control page layout
2. Which of the following is the correct way to define a character field named title with a maximum length of 100 in a Django model?
easy
A. title = models.IntegerField(max_length=100)
B. title = models.TextField(max_length=100)
C. title = models.CharField(length=100)
D. title = models.CharField(max_length=100)
Solution
Step 1: Identify correct field type and argument
For text with length limit, CharField with max_length is correct.
Step 2: Check syntax correctness
TextField does not use max_length, IntegerField is for numbers, and CharField requires max_length, not length.
Final Answer:
title = models.CharField(max_length=100) -> Option D
Quick Check:
CharField + max_length = correct syntax [OK]
Hint: Use CharField with max_length for short text fields [OK]
Common Mistakes:
Using TextField with max_length
Using IntegerField for text
Writing length instead of max_length
3. Given the model definition below, what will be the default value of the is_active field for a new instance if not specified?
class User(models.Model):
username = models.CharField(max_length=50)
is_active = models.BooleanField(default=true)
medium
A. true
B. false
C. Raises an error
D. null
Solution
Step 1: Check Python syntax for booleans
In Python and Django, booleans are True and False (capitalized). true is undefined.
Step 2: Model definition outcome
Defining default=true raises NameError at model definition time, preventing instance creation.
Final Answer:
Raises an error -> Option C
Quick Check:
default=true -> NameError [OK]
Hint: Python/Django booleans: True/False (capitalized), not true/false [OK]
Common Mistakes:
Assuming default is true despite syntax error
Expecting null as default for BooleanField
Using lowercase true/false in default
4. Identify the error in the following Django model field definition:
class Product(models.Model):
price = models.DecimalField(max_digits=5, decimal_places=2, max_length=10)
medium
A. DecimalField does not accept max_length argument
B. max_digits should be less than decimal_places
C. DecimalField requires a default value
D. Field name 'price' is a reserved keyword
Solution
Step 1: Check DecimalField arguments
DecimalField accepts max_digits and decimal_places, but not max_length.
Step 2: Validate argument usage
Including max_length causes a syntax error because it's invalid for DecimalField.
Final Answer:
DecimalField does not accept max_length argument -> Option A
Quick Check:
DecimalField = max_digits + decimal_places only [OK]
Hint: DecimalField uses max_digits and decimal_places, not max_length [OK]
Common Mistakes:
Adding max_length to DecimalField
Mixing max_digits and decimal_places values incorrectly
Assuming field names are reserved keywords
5. You want to create a Django model BlogPost with a title (max 200 chars), content (unlimited text), and a published date that can be empty. Which of the following is the best model definition?
hard
A. class BlogPost(models.Model):\n title = models.CharField(max_length=200)\n content = models.TextField()\n published_date = models.DateTimeField(blank=True, null=True)
B. class BlogPost(models.Model):\n title = models.TextField(max_length=200)\n content = models.CharField()\n published_date = models.DateTimeField()
C. class BlogPost(models.Model):\n title = models.CharField(max_length=200, blank=true)\n content = models.TextField()\n published_date = models.DateTimeField()
D. class BlogPost(models.Model):\n title = models.CharField(max_length=200)\n content = models.TextField()\n published_date = models.DateTimeField(default='')
Solution
Step 1: Match field types to requirements
Title needs limited length, so CharField(max_length=200) is correct. Content is unlimited text, so TextField fits.
Step 2: Allow published_date to be empty
To allow empty dates, use blank=True and null=True on DateTimeField.
Step 3: Check other options for errors
class BlogPost(models.Model):\n title = models.TextField(max_length=200)\n content = models.CharField()\n published_date = models.DateTimeField() misuses TextField with max_length and swaps content types. class BlogPost(models.Model):\n title = models.CharField(max_length=200, blank=true)\n content = models.TextField()\n published_date = models.DateTimeField() does not allow empty published_date. class BlogPost(models.Model):\n title = models.CharField(max_length=200)\n content = models.TextField()\n published_date = models.DateTimeField(default='') uses invalid default for DateTimeField.
Final Answer:
Correct field types with blank and null for published_date -> Option A