Python Tutorial
Django Update Model
Add fields to an existing model, then make a new migration so the database matches the class.
Add Fields
Edit members/models.py:
from django.db import models
class Member(models.Model):
firstname = models.CharField(max_length=255)
lastname = models.CharField(max_length=255)
phone = models.IntegerField(null=True)
joined_date = models.DateField(null=True)
def __str__(self):
return f"{self.firstname} {self.lastname}"null=True lets existing rows stay valid (new columns start empty). For strings you often also set blank=True so forms and admin allow an empty value.
Migrate Again
python manage.py makemigrations
python manage.py migrateDjango may ask for a default if the field is required and rows already exist. Providing null=True avoids that prompt.
Fill the New Columns
from members.models import Member
import datetime
x = Member.objects.get(id=1)
x.phone = 5551234
x.joined_date = datetime.date(2024, 3, 12)
x.save()Rename or Remove a Field
Change the class, then makemigrations. Django detects a rename if you only change the attribute name; confirm the prompt so it does not drop-and-recreate the column (which would lose data).
📘 Real-World Deep Dive
Knowing <strong>Django Update Model (Django)</strong> well is what turns Django from a curiosity into a daily tool — you'll reach for it in nearly every real project.
Real-Life Scenario
An end-to-end usage of Django Update Model that you'd actually see in a data pipeline or analytics notebook.
Real-Life Example
class Book(models.Model):
title = models.CharField(max_length=200)
isbn = models.CharField(max_length=13, unique=True) # newly added
# After modifying models.py:
# python manage.py makemigrations core
# python manage.py migrateExpected Output
(no output)Common mistakes
- Forgetting to call
.save()on a model instance after mutation silently persists nothing. - Reading every row with
Model.objects.all()on a 1 M-row table OOMs the worker — use.iterator()for streaming. - Queries inside loops produce N+1 problems — pull related rows with
select_related/prefetch_related. - Treating Django Update Model as a black box without reading the docs — the API has subtle defaults that bite when you scale.
🚀 Performance & Best Practices
- Add database indexes (
db_index=TrueorMeta.indexes) on columns used infilter. - Use
cache_pageon read-heavy views and setCONN_MAX_AGEto keep DB connections warm. - Generate migrations with
python manage.py makemigrations --dry-run --verbosity 3and review before committing. - When working with Django, prefer vectorised / batched operations over Python loops.
🧪 Try It Yourself
- Reproduce the snippet on a representative slice of your own data.
- Profile the snippet with
cProfileortimeitand find the single biggest improvement. - Generalise the snippet into a small, reusable function you can drop into future projects.