Bird
Raised Fist0
Djangoframework~10 mins

String representation with __str__ in Django - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - String representation with __str__
Define model class
↓
Add __str__ method
↓
Create model instance
↓
Call str(instance)
↓
Return string from __str__
↓
Display string in admin or shell
This flow shows how defining __str__ in a Django model returns a readable string when the instance is printed or displayed.
Execution Sample
Django
from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)

    def __str__(self):
        return self.title

book = Book(title='Django Basics')
print(str(book))
Defines a Book model with __str__ returning the title, then prints the string representation of a Book instance.
Execution Table
StepActionEvaluationResult
1Define Book model with title fieldClass createdBook class ready
2Add __str__ method returning self.titleMethod added__str__ returns title string
3Create Book instance with title='Django Basics'Instance createdbook.title = 'Django Basics'
4Call str(book)Calls book.__str__()Returns 'Django Basics'
5Print result of str(book)Output to consoleDjango Basics
💡 Execution stops after printing the string representation of the book instance.
Variable Tracker
VariableStartAfter 1After 2After 3Final
book.titleundefinedundefinedundefined'Django Basics''Django Basics'
Key Moments - 2 Insights
Why does print(book) show the title instead of a default object address?
Because the __str__ method is defined to return the title string, print(book) calls __str__ and shows that string (see execution_table step 4).
What happens if __str__ is not defined in the model?
Without __str__, printing the instance shows a default Python object address like <Book object at 0x...>, not a friendly string (not shown in execution_table but implied).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what does step 4 do?
ACreates a new Book instance
BPrints the title directly without calling __str__
CCalls the __str__ method of the book instance
DDeletes the book instance
💡 Hint
Check the 'Action' and 'Evaluation' columns in step 4 of the execution_table.
At which step is the book instance's title set to 'Django Basics'?
AStep 3
BStep 4
CStep 1
DStep 5
💡 Hint
Look at the 'Result' column in step 3 of the execution_table.
If __str__ returned a fixed string 'Book', what would print(str(book)) output at step 5?
A'Django Basics'
B'Book'
CAn error message
DThe default object address
💡 Hint
Refer to the execution_table step 4 and imagine __str__ returns 'Book' instead of self.title.
Concept Snapshot
Django models can define __str__ to return a friendly string.
This string shows when printing the instance or in admin.
Syntax: def __str__(self): return 'your string'
Use self fields to customize output.
Without __str__, print shows object address.
Full Transcript
In Django, the __str__ method in a model class defines how instances show as strings. When you print a model instance or see it in the admin, Django calls __str__ to get a readable name. For example, if a Book model has a title field, defining __str__ to return self.title means printing the book shows its title. Without __str__, printing shows a default object address which is not user-friendly. This visual trace shows defining __str__, creating an instance, calling str(), and printing the result step-by-step.

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

  1. Step 1: Understand the role of __str__ in Django models

    The __str__ method returns a string that describes the model instance clearly and simply.
  2. Step 2: Identify what __str__ does not do

    It does not affect database table names, migrations, or default field values.
  3. Final Answer:

    To provide a readable string representation of the model instance -> Option D
  4. 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

  1. Step 1: Recall the exact method name and return type

    The method must be named __str__ and return a string, not print it.
  2. 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.
  3. Final Answer:

    def __str__(self): return self.name -> Option A
  4. 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

  1. Step 1: Understand the __str__ method output

    The __str__ method returns a formatted string combining title and author.
  2. Step 2: Check what print(str(book)) outputs

    It calls the __str__ method, so it prints "Django Basics by Anna" exactly.
  3. Final Answer:

    Django Basics by Anna -> Option C
  4. 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

  1. Step 1: Check the method's behavior

    The method uses print instead of returning a string, so it returns None by default.
  2. Step 2: Understand the expected __str__ behavior

    __str__ must return a string to represent the object, not print it.
  3. Final Answer:

    It should return a string, not print it -> Option A
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    def __str__(self): return f"{self.first_name or ''} {self.last_name or ''}".strip() -> Option B
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard