We use __str__ to show a friendly name for objects when we print them or see them in admin. It helps us understand what the object is without extra code.
When you want to see a readable name for your model objects in Django admin.
When printing model instances in the console or logs to understand what they represent.
When debugging and you want clear output instead of default object memory addresses.
When displaying model objects in templates or other parts of your app where a string is needed.
Syntax
Django
class ModelName(models.Model):
# fields heredef __str__(self):
return'string representation of the object'
The __str__ method must return a string.
This method is called automatically when you print the object or show it in admin.
Examples
This shows the book's title when you print a Book object.
Django
class Book(models.Model):
title = models.CharField(max_length=100)
def __str__(self):
return self.title
This combines first and last name for a clear person name.
This model Product returns a string with its name and price. When printed, it shows a friendly description.
Django
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=6, decimal_places=2)
def __str__(self):
return f"{self.name} (${self.price})"# Example usage:
product = Product(name='Coffee Mug', price=12.99)
print(str(product))
OutputSuccess
Important Notes
Without __str__, Django shows a less helpful default like <Product object (1)>.
Always return a string, not other types like numbers or None.
Summary
__str__ makes your model objects easy to read and understand.
It is used automatically in admin and when printing objects.
Return a clear, simple string that describes the object well.
Practice
(1/5)
1. What is the main purpose of defining a __str__ method in a Django model?
easy
A. To create a new database migration
B. To define the database table name
C. To set default values for model fields
D. To provide a readable string representation of the model instance
Solution
Step 1: Understand the role of __str__ in Django models
The __str__ method returns a string that describes the model instance clearly and simply.
Step 2: Identify what __str__ does not do
It does not affect database table names, migrations, or default field values.
Final Answer:
To provide a readable string representation of the model instance -> Option D
Quick Check:
Purpose of __str__ = readable string [OK]
Hint: Think: How do I want to see this object as text? [OK]
Common Mistakes:
Confusing __str__ with database schema settings
Using __str__ to set default field values
Thinking __str__ creates migrations
2. Which of the following is the correct way to define a __str__ method in a Django model?
easy
A. def __str__(self): return self.name
B. def str(self): return self.name
C. def __str__(self): print(self.name)
D. def __string__(self): return self.name
Solution
Step 1: Recall the exact method name and return type
The method must be named __str__ and return a string, not print it.
Step 2: Check each option for correctness
def __str__(self): return self.name correctly defines __str__ and returns self.name. Others have wrong names or use print instead of return.
Final Answer:
def __str__(self): return self.name -> Option A
Quick Check:
Correct method name and return string = def __str__(self): return self.name [OK]
Hint: Remember: __str__ must return a string, not print it [OK]
Common Mistakes:
Using print instead of return inside __str__
Misspelling __str__ method name
Defining __string__ or str instead of __str__
3. Given this Django model:
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
def __str__(self):
return f"{self.title} by {self.author}"
book = Book(title='Django Basics', author='Anna')
print(str(book))
What will be printed?
medium
A. Book object (None)
B. Django Basics
C. Django Basics by Anna
D.
Solution
Step 1: Understand the __str__ method output
The __str__ method returns a formatted string combining title and author.
Step 2: Check what print(str(book)) outputs
It calls the __str__ method, so it prints "Django Basics by Anna" exactly.
Final Answer:
Django Basics by Anna -> Option C
Quick Check:
__str__ output = printed string [OK]
Hint: print(str(object)) shows __str__ return value [OK]
Common Mistakes:
Expecting default object representation instead of __str__ output
Confusing __repr__ with __str__ output
Ignoring f-string formatting in __str__
4. What is wrong with this __str__ method in a Django model?
def __str__(self):
print(self.name)
medium
A. It should return a string, not print it
B. The method name is incorrect
C. It should raise an exception
D. It should be a class method
Solution
Step 1: Check the method's behavior
The method uses print instead of returning a string, so it returns None by default.
Step 2: Understand the expected __str__ behavior
__str__ must return a string to represent the object, not print it.
Final Answer:
It should return a string, not print it -> Option A
Quick Check:
__str__ must return string [OK]
Hint: Always return a string in __str__, never print [OK]
Common Mistakes:
Using print instead of return
Misnaming the method
Making __str__ a class method
5. You have a Django model with fields first_name and last_name. You want the admin and print statements to show the full name. Which __str__ method correctly achieves this and handles missing names gracefully?
hard
A. def __str__(self): return self.first_name + ' ' + self.last_name
B. def __str__(self): return f"{self.first_name or ''} {self.last_name or ''}".strip()
C. def __str__(self): return self.first_name if self.first_name else self.last_name
D. def __str__(self): print(f"{self.first_name} {self.last_name}")
Solution
Step 1: Analyze each option for handling missing names
def __str__(self): return self.first_name + ' ' + self.last_name concatenates directly, which can cause errors if either is None. def __str__(self): return f"{self.first_name or ''} {self.last_name or ''}".strip() uses or '' to avoid None and strips extra spaces. def __str__(self): return self.first_name if self.first_name else self.last_name only returns one name, not full name. def __str__(self): print(f"{self.first_name} {self.last_name}") uses print instead of return.
Step 2: Choose the option that returns full name safely
def __str__(self): return f"{self.first_name or ''} {self.last_name or ''}".strip() returns a full name string, handles missing values, and returns a clean string.
Final Answer:
def __str__(self): return f"{self.first_name or ''} {self.last_name or ''}".strip() -> Option B
Quick Check:
Safe full name string return = def __str__(self): return f"{self.first_name or ''} {self.last_name or ''}".strip() [OK]
Hint: Use or '' and strip() to handle missing fields in __str__ [OK]
Common Mistakes:
Concatenating without checking for None
Using print instead of return
Returning only one field instead of full name
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.